install-freedombone.sh 424KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449
  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. VARIANT_TOR_WIFI="torwifi"
  100. # An optional configuration file which overrides some of these variables
  101. CONFIGURATION_FILE="freedombone.cfg"
  102. SSH_PORT=2222
  103. # number of CPU cores
  104. CPU_CORES=1
  105. # The static IP address of the system within the local network
  106. LOCAL_NETWORK_STATIC_IP_ADDRESS="192.168.1.60"
  107. # IP address of the router (gateway)
  108. ROUTER_IP_ADDRESS="192.168.1.254"
  109. # whether to route outgoing traffic through Tor
  110. ROUTE_THROUGH_TOR="no"
  111. # Why use Google as a time source?
  112. # The thinking here is that it's likely to be reliable and fast.
  113. # The ping doesn't reveal any information other than that the server
  114. # is running, and if anyone maliciously alters the time on Google's
  115. # servers then that would certainly be newsworthy and they'd be
  116. # likely to do something about it quickly.
  117. # If you have better time sources then change them here.
  118. TLS_TIME_SOURCE1="google.com"
  119. TLS_TIME_SOURCE2="www.ptb.de"
  120. # kernel specifically tweaked for the Beaglebone Black
  121. # See http://rcn-ee.net/deb/jessie-armhf/
  122. KERNEL_VERSION="v3.15.10-bone8"
  123. # Whether or not to use the beaglebone's hardware random number generator
  124. USE_HWRNG="yes"
  125. # Whether this system is being installed within a docker container
  126. INSTALLED_WITHIN_DOCKER="no"
  127. # If you want to run a public mailing list specify its name here.
  128. # There should be no spaces in the name
  129. PUBLIC_MAILING_LIST=
  130. # Optional different domain name for the public mailing list
  131. PUBLIC_MAILING_LIST_DOMAIN_NAME=
  132. # Directory where the public mailing list data is stored
  133. PUBLIC_MAILING_LIST_DIRECTORY="/var/spool/mlmmj"
  134. # If you want to run an encrypted mailing list specify its name here.
  135. # There should be no spaces in the name
  136. PRIVATE_MAILING_LIST=
  137. # Domain name or freedns subdomain for mediagoblin installation
  138. MEDIAGOBLIN_DOMAIN_NAME=
  139. MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE=
  140. MEDIAGOBLIN_REPO=""
  141. MEDIAGOBLIN_ADMIN_PASSWORD=
  142. # Domain name or freedns subdomain for microblog installation
  143. MICROBLOG_DOMAIN_NAME=
  144. MICROBLOG_FREEDNS_SUBDOMAIN_CODE=
  145. MICROBLOG_REPO="git://gitorious.org/social/mainline.git"
  146. MICROBLOG_ADMIN_PASSWORD=
  147. # Domain name or redmatrix installation
  148. REDMATRIX_DOMAIN_NAME=
  149. REDMATRIX_FREEDNS_SUBDOMAIN_CODE=
  150. REDMATRIX_REPO="https://github.com/friendica/red.git"
  151. REDMATRIX_ADDONS_REPO="https://github.com/friendica/red-addons.git"
  152. REDMATRIX_ADMIN_PASSWORD=
  153. # Domain name and freedns subdomain for Owncloud installation
  154. OWNCLOUD_DOMAIN_NAME=
  155. OWNCLOUD_FREEDNS_SUBDOMAIN_CODE=
  156. OWNCLOUD_ADMIN_PASSWORD=
  157. # Domain name and freedns subdomain for your wiki
  158. WIKI_DOMAIN_NAME=
  159. WIKI_FREEDNS_SUBDOMAIN_CODE=
  160. WIKI_ADMIN_PASSWORD=
  161. WIKI_TITLE="Freedombone Wiki"
  162. # Domain name and freedns subdomain for your blog
  163. FULLBLOG_DOMAIN_NAME=
  164. FULLBLOG_FREEDNS_SUBDOMAIN_CODE=
  165. MY_BLOG_TITLE="My Blog"
  166. MY_BLOG_SUBTITLE="Another Freedombone Blog"
  167. GPG_KEYSERVER="hkp://keys.gnupg.net"
  168. # whether to encrypt all incoming email with your public key
  169. GPG_ENCRYPT_STORED_EMAIL="yes"
  170. # gets set to yes if gpg keys are imported from usb
  171. GPG_KEYS_IMPORTED="no"
  172. # optionally you can provide your exported GPG key pair here
  173. # Note that the private key file will be deleted after use
  174. # If these are unspecified then a new GPG key will be created
  175. MY_GPG_PUBLIC_KEY=
  176. MY_GPG_PRIVATE_KEY=
  177. # optionally specify your public key ID
  178. MY_GPG_PUBLIC_KEY_ID=
  179. # If you have existing mail within a Maildir
  180. # you can specify the directory here and the files
  181. # will be imported
  182. IMPORT_MAILDIR=
  183. # The Debian package repository to use.
  184. DEBIAN_REPO="ftp.us.debian.org"
  185. DEBIAN_VERSION="jessie"
  186. # Directory where source code is downloaded and compiled
  187. INSTALL_DIR=$HOME/build
  188. # device name for an attached usb drive
  189. USB_DRIVE=/dev/sda1
  190. # Location where the USB drive is mounted to
  191. USB_MOUNT=/mnt/usb
  192. # name of a script used to upgrade the system
  193. UPGRADE_SCRIPT_NAME="freedombone-upgrade"
  194. # name of a script which keeps running processes going even if they crash
  195. WATCHDOG_SCRIPT_NAME="keepon"
  196. # Name of a script used to create a backup of the system on usb drive
  197. BACKUP_SCRIPT_NAME="backup"
  198. # Name of a script used to restore the system from usb drive
  199. RESTORE_SCRIPT_NAME="restore"
  200. # name of a script used to backup to friends servers
  201. BACKUP_TO_FRIENDS_SCRIPT_NAME="backup2friends"
  202. # name of a script used to restore backed up data from a friend
  203. RESTORE_FROM_FRIEND_SCRIPT_NAME="restorefromfriend"
  204. # Location of the certificate used to encrypt backups
  205. BACKUP_CERTIFICATE=/etc/ssl/private/backup.key
  206. # memory limit for php in MB
  207. MAX_PHP_MEMORY=64
  208. # default MariaDB password
  209. MARIADB_PASSWORD=
  210. # Directory where XMPP settings are stored
  211. XMPP_DIRECTORY="/var/lib/prosody"
  212. # file containing a list of remote locations to backup to
  213. # Format: [username@friendsdomain//home/username] [ssh_password]
  214. # With the only space character being between the server and the password
  215. FRIENDS_SERVERS_LIST=/home/$MY_USERNAME/backup.list
  216. # list of encryption protocols
  217. SSL_PROTOCOLS="TLSv1 TLSv1.1 TLSv1.2"
  218. # list of ciphers to use. See bettercrypto.org recommendations
  219. 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"
  220. # the default email address
  221. MY_EMAIL_ADDRESS=$MY_USERNAME@$DOMAIN_NAME
  222. # optionally specify your name to appear on the blog
  223. MY_NAME=$DOMAIN_NAME
  224. export DEBIAN_FRONTEND=noninteractive
  225. # logging level for Nginx
  226. WEBSERVER_LOG_LEVEL='crit'
  227. # used to limit CPU usage
  228. CPULIMIT='/usr/bin/cpulimit -l 20 -e'
  229. # command to create a git repository
  230. CREATE_GIT_PROJECT_COMMAND='create-project'
  231. # File which keeps track of what has already been installed
  232. COMPLETION_FILE=$HOME/freedombone-completed.txt
  233. if [ ! -f $COMPLETION_FILE ]; then
  234. touch $COMPLETION_FILE
  235. fi
  236. # Your github username
  237. GITHUB_USERNAME=
  238. # Directory where github projects will be backed up
  239. GITHUB_BACKUP_DIRECTORY=/var/backups/github
  240. # Used to indicate whether the backup contains MariaDB databases or not
  241. BACKUP_INCLUDES_DATABASES="no"
  242. # contains the mysql root password which
  243. # is used for backups and repair
  244. DATABASE_PASSWORD_FILE=/root/dbpass
  245. # log file where details of remote backups are stored
  246. REMOTE_BACKUPS_LOG=/var/log/remotebackups.log
  247. # Whether to enable wifi (on the BBB via USB)
  248. ENABLE_WIFI="no"
  249. # Whether to enable wifi hotspot (on the BBB via USB)
  250. ENABLE_WIFI_HOTSPOT="no"
  251. # ESSID for wifi
  252. WIFI_ESSID=
  253. # Optional wifi password
  254. WIFI_PASSWORD=
  255. # Wifi interface
  256. WIFI_INTERFACE="wlan0"
  257. # Whether to always force there to exist a wifi password
  258. WIFI_FORCE_PASSWORD="yes"
  259. # Channel number for wifi hotspot
  260. WIFI_HOTSPOT_CHANNEL=7
  261. # Mode such as "g" or "n"
  262. WIFI_HOTSPOT_MODE="g"
  263. # Static IP address for wifi hotspot
  264. WIFI_STATIC_IP_ADDRESS="192.168.4.1"
  265. # Subnet for wifi hotspot
  266. WIFI_SUBNET="192.168.4.0"
  267. # DHCP range for wifi hotspot
  268. WIFI_IP_RANGE_START="192.168.4.10"
  269. WIFI_IP_RANGE_END="192.168.4.20"
  270. # Broadcast address for wifi hotspot
  271. WIFI_BROADCAST_ADDRESS="192.168.4.255"
  272. # Comma separated list of DNS servers for wifi hotspot
  273. WIFI_DNS_SERVERS="213.73.91.35, 85.214.20.141"
  274. # message if something fails to install
  275. 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."
  276. function show_help {
  277. echo ''
  278. echo './install-freedombone.sh [domain] [username] [subdomain code] [system type]'
  279. echo ''
  280. echo 'domain'
  281. echo '------'
  282. echo 'This is your domain name or freedns subdomain.'
  283. echo ''
  284. echo 'username'
  285. echo '--------'
  286. echo ''
  287. echo 'This will be your username on the system. It should be all'
  288. echo 'lower case and contain no spaces'
  289. echo ''
  290. echo 'subdomain code'
  291. echo '--------------'
  292. echo 'This is the freedns dynamic DNS code for your subdomain.'
  293. echo "To find it from https://freedns.afraid.org select 'Dynamic DNS',"
  294. echo "then 'quick cron example' and copy the code located between "
  295. echo "'?' and '=='."
  296. echo ''
  297. echo 'system type'
  298. echo '-----------'
  299. echo 'This can either be blank if you wish to install the full system,'
  300. echo "or for more specialised variants you can specify '$VARIANT_MAILBOX', '$VARIANT_CLOUD',"
  301. echo "'$VARIANT_CHAT', '$VARIANT_SOCIAL', '$VARIANT_MEDIA', '$VARIANT_TOR_DONGLE' or '$VARIANT_WRITER'."
  302. echo "If you wish to install everything except email then use the '$VARIANT_NONMAILBOX' variaint."
  303. }
  304. function argument_checks {
  305. if [ ! -d /home/$MY_USERNAME ]; then
  306. echo "There is no user '$MY_USERNAME' on the system. Use 'adduser $MY_USERNAME' to create the user."
  307. exit 1
  308. fi
  309. if [ ! $DOMAIN_NAME ]; then
  310. show_help
  311. exit 2
  312. fi
  313. if [ ! $MY_USERNAME ]; then
  314. show_help
  315. exit 3
  316. fi
  317. if [ ! $FREEDNS_SUBDOMAIN_CODE ]; then
  318. if [[ $DOMAIN_NAME == "tor-wifi" || $DOMAIN_NAME == "torwifi" ]]; then
  319. DOMAIN_NAME="tor-wifi"
  320. SYSTEM_TYPE=$VARIANT_TOR_WIFI
  321. ROUTE_THROUGH_TOR="yes"
  322. ENABLE_WIFI_HOTSPOT="yes"
  323. fi
  324. if [[ $DOMAIN_NAME == "tor" || $DOMAIN_NAME == "tor-dongle" || $DOMAIN_NAME == "tordongle" ]]; then
  325. DOMAIN_NAME="tor-dongle"
  326. SYSTEM_TYPE=$VARIANT_TOR_DONGLE
  327. fi
  328. if [[ $SYSTEM_TYPE != $VARIANT_TOR_DONGLE && $SYSTEM_TYPE != $VARIANT_TOR_WIFI ]]; then
  329. show_help
  330. exit 4
  331. fi
  332. fi
  333. if [ $SYSTEM_TYPE ]; then
  334. 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 && $SYSTEM_TYPE != $VARIANT_TOR_WIFI ]]; then
  335. echo "'$SYSTEM_TYPE' is an unrecognised Freedombone variant."
  336. exit 30
  337. fi
  338. fi
  339. }
  340. function read_configuration {
  341. # if not installing on a Beaglebone then use sdb as the USB drive by default
  342. if [ ! $INSTALLING_ON_BBB ]; then
  343. if [[ $USB_DRIVE == /dev/sda1 ]]; then
  344. USB_DRIVE=/dev/sdb1
  345. fi
  346. fi
  347. if [ -f $CONFIGURATION_FILE ]; then
  348. if grep -q "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE; then
  349. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  350. fi
  351. if grep -q "WIFI_STATIC_IP_ADDRESS" $CONFIGURATION_FILE; then
  352. WIFI_STATIC_IP_ADDRESS=$(grep "WIFI_STATIC_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  353. fi
  354. if grep -q "WIFI_SUBNET" $CONFIGURATION_FILE; then
  355. WIFI_SUBNET=$(grep "WIFI_SUBNET" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  356. fi
  357. if grep -q "WIFI_BROADCAST_ADDRESS" $CONFIGURATION_FILE; then
  358. WIFI_BROADCAST_ADDRESS=$(grep "WIFI_BROADCAST_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  359. fi
  360. if grep -q "WIFI_DNS_SERVERS" $CONFIGURATION_FILE; then
  361. WIFI_DNS_SERVERS=$(grep "WIFI_DNS_SERVERS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  362. fi
  363. if grep -q "WIFI_IP_RANGE_START" $CONFIGURATION_FILE; then
  364. WIFI_IP_RANGE_START=$(grep "WIFI_IP_RANGE_START" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  365. fi
  366. if grep -q "WIFI_IP_RANGE_END" $CONFIGURATION_FILE; then
  367. WIFI_IP_RANGE_END=$(grep "WIFI_IP_RANGE_END" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  368. fi
  369. if grep -q "WIFI_INTERFACE" $CONFIGURATION_FILE; then
  370. WIFI_INTERFACE=$(grep "WIFI_INTERFACE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  371. fi
  372. if grep -q "WIFI_HOTSPOT_MODE" $CONFIGURATION_FILE; then
  373. WIFI_HOTSPOT_MODE=$(grep "WIFI_HOTSPOT_MODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  374. fi
  375. if grep -q "WIFI_HOTSPOT_CHANNEL" $CONFIGURATION_FILE; then
  376. WIFI_HOTSPOT_CHANNEL=$(grep "WIFI_HOTSPOT_CHANNEL" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  377. fi
  378. if grep -q "ENABLE_WIFI" $CONFIGURATION_FILE; then
  379. ENABLE_WIFI=$(grep "ENABLE_WIFI" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  380. fi
  381. if grep -q "ENABLE_WIFI_HOTSPOT" $CONFIGURATION_FILE; then
  382. ENABLE_WIFI_HOTSPOT=$(grep "ENABLE_WIFI_HOTSPOT" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  383. fi
  384. if grep -q "WIFI_PASSWORD" $CONFIGURATION_FILE; then
  385. WIFI_PASSWORD=$(grep "WIFI_PASSWORD" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  386. fi
  387. if grep -q "WIFI_ESSID" $CONFIGURATION_FILE; then
  388. WIFI_ESSID=$(grep "WIFI_ESSID" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  389. fi
  390. if grep -q "BACKUP_CERTIFICATE" $CONFIGURATION_FILE; then
  391. BACKUP_CERTIFICATE=$(grep "BACKUP_CERTIFICATE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  392. fi
  393. if grep -q "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE; then
  394. ROUTER_IP_ADDRESS=$(grep "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  395. fi
  396. if grep -q "GITHUB_USERNAME" $CONFIGURATION_FILE; then
  397. GITHUB_USERNAME=$(grep "GITHUB_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  398. fi
  399. if grep -q "GITHUB_BACKUP_DIRECTORY" $CONFIGURATION_FILE; then
  400. GITHUB_BACKUP_DIRECTORY=$(grep "GITHUB_BACKUP_DIRECTORY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  401. fi
  402. if grep -q "CPU_CORES" $CONFIGURATION_FILE; then
  403. CPU_CORES=$(grep "CPU_CORES" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  404. fi
  405. if grep -q "WEBSERVER_LOG_LEVEL" $CONFIGURATION_FILE; then
  406. WEBSERVER_LOG_LEVEL=$(grep "WEBSERVER_LOG_LEVEL" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  407. fi
  408. if grep -q "ROUTE_THROUGH_TOR" $CONFIGURATION_FILE; then
  409. ROUTE_THROUGH_TOR=$(grep "ROUTE_THROUGH_TOR" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  410. fi
  411. if grep -q "WIKI_TITLE" $CONFIGURATION_FILE; then
  412. WIKI_TITLE=$(grep "WIKI_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  413. fi
  414. if grep -q "MY_NAME" $CONFIGURATION_FILE; then
  415. MY_NAME=$(grep "MY_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  416. fi
  417. if grep -q "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE; then
  418. MY_EMAIL_ADDRESS=$(grep "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  419. fi
  420. if grep -q "INSTALLING_ON_BBB" $CONFIGURATION_FILE; then
  421. INSTALLING_ON_BBB=$(grep "INSTALLING_ON_BBB" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  422. fi
  423. if grep -q "SSH_PORT" $CONFIGURATION_FILE; then
  424. SSH_PORT=$(grep "SSH_PORT" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  425. fi
  426. if grep -q "INSTALLED_WITHIN_DOCKER" $CONFIGURATION_FILE; then
  427. INSTALLED_WITHIN_DOCKER=$(grep "INSTALLED_WITHIN_DOCKER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  428. fi
  429. if grep -q "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE; then
  430. PUBLIC_MAILING_LIST=$(grep "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  431. fi
  432. if grep -q "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  433. MICROBLOG_DOMAIN_NAME=$(grep "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  434. fi
  435. if grep -q "MICROBLOG_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE; then
  436. MICROBLOG_FREEDNS_SUBDOMAIN_CODE=$(grep "MICROBLOG_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  437. fi
  438. if grep -q "REDMATRIX_DOMAIN_NAME" $CONFIGURATION_FILE; then
  439. REDMATRIX_DOMAIN_NAME=$(grep "REDMATRIX_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  440. fi
  441. if grep -q "REDMATRIX_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE; then
  442. REDMATRIX_FREEDNS_SUBDOMAIN_CODE=$(grep "REDMATRIX_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  443. fi
  444. if grep -q "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE; then
  445. OWNCLOUD_DOMAIN_NAME=$(grep "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  446. fi
  447. if grep -q "OWNCLOUD_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE; then
  448. OWNCLOUD_FREEDNS_SUBDOMAIN_CODE=$(grep "OWNCLOUD_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  449. fi
  450. if grep -q "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE; then
  451. WIKI_DOMAIN_NAME=$(grep "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  452. fi
  453. if grep -q "WIKI_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE; then
  454. WIKI_FREEDNS_SUBDOMAIN_CODE=$(grep "WIKI_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  455. fi
  456. if grep -q "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  457. FULLBLOG_DOMAIN_NAME=$(grep "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  458. fi
  459. if grep -q "FULLBLOG_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE; then
  460. FULLBLOG_FREEDNS_SUBDOMAIN_CODE=$(grep "FULLBLOG_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  461. fi
  462. if grep -q "MY_BLOG_TITLE" $CONFIGURATION_FILE; then
  463. MY_BLOG_TITLE=$(grep "MY_BLOG_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  464. fi
  465. if grep -q "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE; then
  466. MY_BLOG_SUBTITLE=$(grep "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  467. fi
  468. if grep -q "GPG_ENCRYPT_STORED_EMAIL" $CONFIGURATION_FILE; then
  469. GPG_ENCRYPT_STORED_EMAIL=$(grep "GPG_ENCRYPT_STORED_EMAIL" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  470. fi
  471. if grep -q "MY_GPG_PUBLIC_KEY" $CONFIGURATION_FILE; then
  472. MY_GPG_PUBLIC_KEY=$(grep "MY_GPG_PUBLIC_KEY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  473. fi
  474. if grep -q "MY_GPG_PRIVATE_KEY" $CONFIGURATION_FILE; then
  475. MY_GPG_PRIVATE_KEY=$(grep "MY_GPG_PRIVATE_KEY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  476. fi
  477. if grep -q "MY_GPG_PUBLIC_KEY_ID" $CONFIGURATION_FILE; then
  478. MY_GPG_PUBLIC_KEY_ID=$(grep "MY_GPG_PUBLIC_KEY_ID" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  479. fi
  480. if grep -q "USB_DRIVE" $CONFIGURATION_FILE; then
  481. USB_DRIVE=$(grep "USB_DRIVE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  482. fi
  483. if grep -q "MAX_PHP_MEMORY" $CONFIGURATION_FILE; then
  484. MAX_PHP_MEMORY=$(grep "MAX_PHP_MEMORY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  485. fi
  486. if grep -q "TLS_TIME_SOURCE1" $CONFIGURATION_FILE; then
  487. TLS_TIME_SOURCE1=$(grep "TLS_TIME_SOURCE1" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  488. fi
  489. if grep -q "TLS_TIME_SOURCE2" $CONFIGURATION_FILE; then
  490. TLS_TIME_SOURCE2=$(grep "TLS_TIME_SOURCE2" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  491. fi
  492. fi
  493. }
  494. function install_not_on_BBB {
  495. if grep -Fxq "install_not_on_BBB" $COMPLETION_FILE; then
  496. return
  497. fi
  498. if [[ INSTALLING_ON_BBB == "yes" ]]; then
  499. return
  500. fi
  501. echo '# This file describes the network interfaces available on your system' > /etc/network/interfaces
  502. echo '# and how to activate them. For more information, see interfaces(5).' >> /etc/network/interfaces
  503. echo '' >> /etc/network/interfaces
  504. echo '# The loopback network interface' >> /etc/network/interfaces
  505. echo 'auto lo' >> /etc/network/interfaces
  506. echo 'iface lo inet loopback' >> /etc/network/interfaces
  507. echo '' >> /etc/network/interfaces
  508. echo '# The primary network interface' >> /etc/network/interfaces
  509. echo 'auto eth0' >> /etc/network/interfaces
  510. echo 'iface eth0 inet static' >> /etc/network/interfaces
  511. echo " address $LOCAL_NETWORK_STATIC_IP_ADDRESS" >> /etc/network/interfaces
  512. echo ' netmask 255.255.255.0' >> /etc/network/interfaces
  513. echo " gateway $ROUTER_IP_ADDRESS" >> /etc/network/interfaces
  514. echo ' dns-nameservers 213.73.91.35 85.214.20.141' >> /etc/network/interfaces
  515. echo '# Example to keep MAC address between reboots' >> /etc/network/interfaces
  516. echo '#hwaddress ether DE:AD:BE:EF:CA:FE' >> /etc/network/interfaces
  517. echo '' >> /etc/network/interfaces
  518. echo '# The secondary network interface' >> /etc/network/interfaces
  519. echo '#auto eth1' >> /etc/network/interfaces
  520. echo '#iface eth1 inet dhcp' >> /etc/network/interfaces
  521. echo '' >> /etc/network/interfaces
  522. echo '# WiFi Example' >> /etc/network/interfaces
  523. echo '#auto wlan0' >> /etc/network/interfaces
  524. echo '#iface wlan0 inet dhcp' >> /etc/network/interfaces
  525. echo '# wpa-ssid "essid"' >> /etc/network/interfaces
  526. echo '# wpa-psk "password"' >> /etc/network/interfaces
  527. echo '' >> /etc/network/interfaces
  528. echo '# Ethernet/RNDIS gadget (g_ether)' >> /etc/network/interfaces
  529. echo '# ... or on host side, usbnet and random hwaddr' >> /etc/network/interfaces
  530. echo '# Note on some boards, usb0 is automaticly setup with an init script' >> /etc/network/interfaces
  531. echo '#iface usb0 inet static' >> /etc/network/interfaces
  532. echo '# address 192.168.7.2' >> /etc/network/interfaces
  533. echo '# netmask 255.255.255.0' >> /etc/network/interfaces
  534. echo '# network 192.168.7.0' >> /etc/network/interfaces
  535. echo '# gateway 192.168.7.1' >> /etc/network/interfaces
  536. echo 'install_not_on_BBB' >> $COMPLETION_FILE
  537. }
  538. function check_hwrng {
  539. # If hardware random number generation was enabled then make sure that the device exists.
  540. # if /dev/hwrng is not found then any subsequent cryptographic key generation would
  541. # suffer from low entropy and might be insecure
  542. if [ ! -f /etc/default/rng-tools ]; then
  543. return
  544. fi
  545. if [ ! -e /dev/hwrng ]; then
  546. ls /dev/hw*
  547. echo 'The hardware random number generator is enabled but could not be detected on'
  548. echo '/dev/hwrng. There may be a problem with the installation or the Beaglebone hardware.'
  549. exit 75
  550. fi
  551. }
  552. function get_mariadb_password {
  553. if [ -f /home/$MY_USERNAME/README ]; then
  554. if grep -q "MariaDB password" /home/$MY_USERNAME/README; then
  555. if [ -f $DATABASE_PASSWORD_FILE ]; then
  556. MARIADB_PASSWORD=$(cat $DATABASE_PASSWORD_FILE)
  557. else
  558. MARIADB_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "MariaDB password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  559. echo "$MARIADB_PASSWORD" > $DATABASE_PASSWORD_FILE
  560. chmod 600 $DATABASE_PASSWORD_FILE
  561. fi
  562. fi
  563. fi
  564. }
  565. function get_mariadb_gnusocial_admin_password {
  566. if [ -f /home/$MY_USERNAME/README ]; then
  567. if grep -q "MariaDB gnusocial admin password" /home/$MY_USERNAME/README; then
  568. MICROBLOG_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "MariaDB gnusocial admin password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  569. fi
  570. fi
  571. }
  572. function get_mariadb_redmatrix_admin_password {
  573. if [ -f /home/$MY_USERNAME/README ]; then
  574. if grep -q "MariaDB Red Matrix admin password" /home/$MY_USERNAME/README; then
  575. REDMATRIX_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "MariaDB Red Matrix admin password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  576. fi
  577. fi
  578. }
  579. function get_mariadb_owncloud_admin_password {
  580. if [ -f /home/$MY_USERNAME/README ]; then
  581. if grep -q "Owncloud database password" /home/$MY_USERNAME/README; then
  582. OWNCLOUD_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "Owncloud database password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  583. fi
  584. fi
  585. }
  586. # For rsyncrypto usage see http://archive09.linux.com/feature/125322
  587. function create_backup_script {
  588. if grep -Fxq "create_backup_script" $COMPLETION_FILE; then
  589. return
  590. fi
  591. apt-get -y --force-yes install rsyncrypto
  592. get_mariadb_password
  593. get_mariadb_gnusocial_admin_password
  594. get_mariadb_redmatrix_admin_password
  595. get_mariadb_owncloud_admin_password
  596. echo '#!/bin/bash' > /usr/bin/$BACKUP_SCRIPT_NAME
  597. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  598. echo "if [ ! -b $USB_DRIVE ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  599. echo ' echo "Please attach a USB drive"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  600. echo ' exit 1' >> /usr/bin/$BACKUP_SCRIPT_NAME
  601. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  602. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  603. echo "if [ ! -d $USB_MOUNT ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  604. echo " mkdir $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  605. echo " mount $USB_DRIVE $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  606. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  607. echo "if [ ! -d $USB_MOUNT/backup ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  608. echo " mkdir $USB_MOUNT/backup" >> /usr/bin/$BACKUP_SCRIPT_NAME
  609. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  610. echo "if [ ! -d $USB_MOUNT/backup ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  611. echo " echo 'There was a problem making the directory $USB_MOUNT/backup.'" >> /usr/bin/$BACKUP_SCRIPT_NAME
  612. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  613. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  614. echo ' exit 27' >> /usr/bin/$BACKUP_SCRIPT_NAME
  615. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  616. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  617. echo "if [ ! -f $BACKUP_CERTIFICATE ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  618. echo ' echo "Creating backup key"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  619. echo ' makecert backup' >> /usr/bin/$BACKUP_SCRIPT_NAME
  620. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  621. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  622. echo "if [ ! -f $BACKUP_CERTIFICATE.gpg ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  623. echo ' echo "GPG encrypt the backup key"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  624. echo " gpg -c $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  625. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  626. echo "cp $BACKUP_CERTIFICATE.gpg $USB_MOUNT/backup/key.gpg" >> /usr/bin/$BACKUP_SCRIPT_NAME
  627. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  628. echo '# MariaDB password' >> /usr/bin/$BACKUP_SCRIPT_NAME
  629. echo -n 'DATABASE_PASSWORD=$(cat ' >> /usr/bin/$BACKUP_SCRIPT_NAME
  630. echo "$DATABASE_PASSWORD_FILE)" >> /usr/bin/$BACKUP_SCRIPT_NAME
  631. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  632. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  633. BACKUP_INCLUDES_DATABASES="yes"
  634. echo "if [ ! -d $USB_MOUNT/backup/gnusocial ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  635. echo " mkdir -p $USB_MOUNT/backup/gnusocial" >> /usr/bin/$BACKUP_SCRIPT_NAME
  636. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  637. echo "if [ ! -d $USB_MOUNT/backup/gnusocialdata ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  638. echo " mkdir -p $USB_MOUNT/backup/gnusocialdata" >> /usr/bin/$BACKUP_SCRIPT_NAME
  639. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  640. echo "if [ ! -d /root/tempgnusocialdata ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  641. echo " mkdir -p /root/tempgnusocialdata" >> /usr/bin/$BACKUP_SCRIPT_NAME
  642. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  643. echo 'echo "Obtaining GNU Social database backup"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  644. echo 'mysqldump --password=$DATABASE_PASSWORD gnusocial > /root/tempgnusocialdata/gnusocial.sql' >> /usr/bin/$BACKUP_SCRIPT_NAME
  645. echo "if [ ! -s /root/tempgnusocialdata/gnusocial.sql ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  646. echo ' echo "GNU social database could not be saved"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  647. echo ' if [ ! $DATABASE_PASSWORD ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  648. echo " echo 'No MariaDB password was given'" >> /usr/bin/$BACKUP_SCRIPT_NAME
  649. echo " fi" >> /usr/bin/$BACKUP_SCRIPT_NAME
  650. echo ' shred -zu /root/tempgnusocialdata/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  651. echo ' rm -rf /root/tempgnusocialdata' >> /usr/bin/$BACKUP_SCRIPT_NAME
  652. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  653. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  654. echo ' exit 296' >> /usr/bin/$BACKUP_SCRIPT_NAME
  655. echo "fi" >> /usr/bin/$BACKUP_SCRIPT_NAME
  656. echo "rsyncrypto -v -r /root/tempgnusocialdata $USB_MOUNT/backup/gnusocialdata $USB_MOUNT/backup/gnusocialdata.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  657. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  658. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  659. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  660. echo ' exit 853' >> /usr/bin/$BACKUP_SCRIPT_NAME
  661. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  662. echo 'shred -zu /root/tempgnusocialdata/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  663. echo 'rm -rf /root/tempgnusocialdata' >> /usr/bin/$BACKUP_SCRIPT_NAME
  664. echo 'echo "Backing up GNU social installation"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  665. 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
  666. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  667. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  668. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  669. echo ' exit 846' >> /usr/bin/$BACKUP_SCRIPT_NAME
  670. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  671. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  672. fi
  673. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  674. BACKUP_INCLUDES_DATABASES="yes"
  675. echo "if [ ! -d $USB_MOUNT/backup/redmatrix ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  676. echo " mkdir -p $USB_MOUNT/backup/redmatrix" >> /usr/bin/$BACKUP_SCRIPT_NAME
  677. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  678. echo "if [ ! -d $USB_MOUNT/backup/redmatrixdata ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  679. echo " mkdir -p $USB_MOUNT/backup/redmatrixdata" >> /usr/bin/$BACKUP_SCRIPT_NAME
  680. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  681. echo "if [ ! -d /root/tempredmatrixdata ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  682. echo " mkdir -p /root/tempredmatrixdata" >> /usr/bin/$BACKUP_SCRIPT_NAME
  683. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  684. echo 'echo "Obtaining Red Matrix database backup"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  685. echo 'mysqldump --password=$DATABASE_PASSWORD redmatrix > /root/tempredmatrixdata/redmatrix.sql' >> /usr/bin/$BACKUP_SCRIPT_NAME
  686. echo "if [ ! -s /root/tempredmatrixdata/redmatrix.sql ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  687. echo ' echo "Red Matrix database could not be saved"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  688. echo ' if [ ! $DATABASE_PASSWORD ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  689. echo " echo 'No MariaDB password was given'" >> /usr/bin/$BACKUP_SCRIPT_NAME
  690. echo " fi" >> /usr/bin/$BACKUP_SCRIPT_NAME
  691. echo ' shred -zu /root/tempredmatrixdata/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  692. echo ' rm -rf /root/tempredmatrixdata' >> /usr/bin/$BACKUP_SCRIPT_NAME
  693. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  694. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  695. echo ' exit 378' >> /usr/bin/$BACKUP_SCRIPT_NAME
  696. echo "fi" >> /usr/bin/$BACKUP_SCRIPT_NAME
  697. echo "rsyncrypto -v -r /root/tempredmatrixdata $USB_MOUNT/backup/redmatrixdata $USB_MOUNT/backup/redmatrixdata.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  698. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  699. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  700. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  701. echo ' exit 285' >> /usr/bin/$BACKUP_SCRIPT_NAME
  702. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  703. echo 'shred -zu /root/tempredmatrixdata/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  704. echo 'rm -rf /root/tempredmatrixdata' >> /usr/bin/$BACKUP_SCRIPT_NAME
  705. echo 'echo "Backing up Red Matrix installation"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  706. 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
  707. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  708. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  709. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  710. echo ' exit 593' >> /usr/bin/$BACKUP_SCRIPT_NAME
  711. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  712. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  713. fi
  714. if grep -Fxq "install_owncloud" $COMPLETION_FILE; then
  715. BACKUP_INCLUDES_DATABASES="yes"
  716. echo "if [ ! -d $USB_MOUNT/backup/owncloud ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  717. echo " mkdir -p $USB_MOUNT/backup/owncloud" >> /usr/bin/$BACKUP_SCRIPT_NAME
  718. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  719. echo "if [ ! -d $USB_MOUNT/backup/owncloud2 ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  720. echo " mkdir -p $USB_MOUNT/backup/owncloud2" >> /usr/bin/$BACKUP_SCRIPT_NAME
  721. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  722. echo "if [ ! -d $USB_MOUNT/backup/ownclouddata ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  723. echo " mkdir -p $USB_MOUNT/backup/ownclouddata" >> /usr/bin/$BACKUP_SCRIPT_NAME
  724. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  725. echo "if [ ! -d /root/tempownclouddata ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  726. echo " mkdir -p /root/tempownclouddata" >> /usr/bin/$BACKUP_SCRIPT_NAME
  727. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  728. echo 'mysqldump --password=$DATABASE_PASSWORD owncloud > /root/tempownclouddata/owncloud.sql' >> /usr/bin/$BACKUP_SCRIPT_NAME
  729. echo "if [ ! -s /root/tempownclouddata/owncloud.sql ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  730. echo ' echo "Owncloud database could not be saved"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  731. echo ' if [ ! $DATABASE_PASSWORD ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  732. echo " echo 'No MariaDB password was given'" >> /usr/bin/$BACKUP_SCRIPT_NAME
  733. echo " fi" >> /usr/bin/$BACKUP_SCRIPT_NAME
  734. echo ' shred -zu /root/tempownclouddata/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  735. echo ' rm -rf /root/tempownclouddata' >> /usr/bin/$BACKUP_SCRIPT_NAME
  736. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  737. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  738. echo ' exit 377' >> /usr/bin/$BACKUP_SCRIPT_NAME
  739. echo "fi" >> /usr/bin/$BACKUP_SCRIPT_NAME
  740. echo "rsyncrypto -v -r /root/tempownclouddata $USB_MOUNT/backup/ownclouddata $USB_MOUNT/backup/ownclouddata.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  741. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  742. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  743. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  744. echo ' exit 188' >> /usr/bin/$BACKUP_SCRIPT_NAME
  745. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  746. echo 'shred -zu /root/tempownclouddata/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  747. echo 'rm -rf /root/tempownclouddata' >> /usr/bin/$BACKUP_SCRIPT_NAME
  748. echo 'echo "Obtaining Owncloud data backup"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  749. echo "rsyncrypto -v -r /var/lib/owncloud $USB_MOUNT/backup/owncloud $USB_MOUNT/backup/owncloud.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  750. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  751. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  752. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  753. echo ' exit 632' >> /usr/bin/$BACKUP_SCRIPT_NAME
  754. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  755. echo "rsyncrypto -v -r /etc/owncloud $USB_MOUNT/backup/owncloud2 $USB_MOUNT/backup/owncloud2.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  756. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  757. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  758. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  759. echo ' exit 632' >> /usr/bin/$BACKUP_SCRIPT_NAME
  760. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  761. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  762. fi
  763. if grep -Fxq "install_wiki" $COMPLETION_FILE; then
  764. echo "if [ ! -d $USB_MOUNT/backup/wiki ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  765. echo " mkdir -p $USB_MOUNT/backup/wiki" >> /usr/bin/$BACKUP_SCRIPT_NAME
  766. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  767. echo "if [ ! -d $USB_MOUNT/backup/wiki2 ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  768. echo " mkdir -p $USB_MOUNT/backup/wiki2" >> /usr/bin/$BACKUP_SCRIPT_NAME
  769. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  770. echo 'echo "Obtaining wiki data backup"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  771. echo "rsyncrypto -v -r /var/lib/dokuwiki $USB_MOUNT/backup/wiki $USB_MOUNT/backup/wiki.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  772. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  773. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  774. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  775. echo ' exit 964' >> /usr/bin/$BACKUP_SCRIPT_NAME
  776. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  777. echo "rsyncrypto -v -r /etc/dokuwiki $USB_MOUNT/backup/wiki2 $USB_MOUNT/backup/wiki2.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  778. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  779. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  780. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  781. echo ' exit 964' >> /usr/bin/$BACKUP_SCRIPT_NAME
  782. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  783. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  784. fi
  785. if grep -Fxq "install_blog" $COMPLETION_FILE; then
  786. echo "if [ ! -d $USB_MOUNT/backup/blog ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  787. echo " mkdir -p $USB_MOUNT/backup/blog" >> /usr/bin/$BACKUP_SCRIPT_NAME
  788. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  789. echo 'echo "Obtaining blog backup"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  790. 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
  791. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  792. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  793. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  794. echo ' exit 854' >> /usr/bin/$BACKUP_SCRIPT_NAME
  795. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  796. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  797. fi
  798. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  799. echo '# Backup certificates' >> /usr/bin/$BACKUP_SCRIPT_NAME
  800. echo "if [ -d /etc/ssl ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  801. echo ' echo "Backing up certificates"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  802. echo " if [ ! -d $USB_MOUNT/backup/ssl ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  803. echo " mkdir -p $USB_MOUNT/backup/ssl" >> /usr/bin/$BACKUP_SCRIPT_NAME
  804. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  805. echo " rsyncrypto -v -r /etc/ssl $USB_MOUNT/backup/ssl $USB_MOUNT/backup/ssl.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  806. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  807. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  808. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  809. echo ' exit 343' >> /usr/bin/$BACKUP_SCRIPT_NAME
  810. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  811. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  812. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  813. echo '# Backup projects' >> /usr/bin/$BACKUP_SCRIPT_NAME
  814. echo "if [ -d /home/$MY_USERNAME/projects ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  815. echo ' echo "Backing up projects"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  816. echo " if [ ! -d $USB_MOUNT/backup/projects ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  817. echo " mkdir -p $USB_MOUNT/backup/projects" >> /usr/bin/$BACKUP_SCRIPT_NAME
  818. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  819. echo " rsyncrypto -v -r /home/$MY_USERNAME/projects $USB_MOUNT/backup/projects $USB_MOUNT/backup/projects.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  820. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  821. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  822. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  823. echo ' exit 873' >> /usr/bin/$BACKUP_SCRIPT_NAME
  824. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  825. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  826. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  827. echo '# Backup personal settings' >> /usr/bin/$BACKUP_SCRIPT_NAME
  828. echo "if [ -d /home/$MY_USERNAME/personal ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  829. echo ' echo "Backing up personal settings"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  830. echo " if [ ! -d $USB_MOUNT/backup/personal ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  831. echo " mkdir -p $USB_MOUNT/backup/personal" >> /usr/bin/$BACKUP_SCRIPT_NAME
  832. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  833. echo " rsyncrypto -v -r /home/$MY_USERNAME/personal $USB_MOUNT/backup/personal $USB_MOUNT/backup/personal.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  834. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  835. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  836. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  837. echo ' exit 649' >> /usr/bin/$BACKUP_SCRIPT_NAME
  838. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  839. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  840. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  841. echo '# Backup the public mailing list' >> /usr/bin/$BACKUP_SCRIPT_NAME
  842. echo "if [ -d $PUBLIC_MAILING_LIST_DIRECTORY ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  843. echo ' echo "Backing up the public mailing list"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  844. echo " if [ ! -d $USB_MOUNT/backup/mailinglist ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  845. echo " mkdir -p $USB_MOUNT/backup/mailinglist" >> /usr/bin/$BACKUP_SCRIPT_NAME
  846. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  847. echo " rsyncrypto -v -r $PUBLIC_MAILING_LIST_DIRECTORY $USB_MOUNT/backup/mailinglist $USB_MOUNT/backup/mailinglist.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  848. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  849. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  850. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  851. echo ' exit 938' >> /usr/bin/$BACKUP_SCRIPT_NAME
  852. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  853. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  854. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  855. echo '# Backup xmpp settings' >> /usr/bin/$BACKUP_SCRIPT_NAME
  856. echo "if [ -d $XMPP_DIRECTORY ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  857. echo ' echo "Backing up the XMPP settings"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  858. echo " if [ ! -d $USB_MOUNT/backup/xmpp ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  859. echo " mkdir -p $USB_MOUNT/backup/xmpp" >> /usr/bin/$BACKUP_SCRIPT_NAME
  860. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  861. echo " rsyncrypto -v -r $XMPP_DIRECTORY $USB_MOUNT/backup/xmpp $USB_MOUNT/backup/xmpp.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  862. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  863. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  864. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  865. echo ' exit 593' >> /usr/bin/$BACKUP_SCRIPT_NAME
  866. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  867. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  868. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  869. echo '# Backup gpg keys' >> /usr/bin/$BACKUP_SCRIPT_NAME
  870. echo "if [ -d /home/$MY_USERNAME/.gnupg ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  871. echo ' echo "Backing up gpg keys"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  872. echo " if [ ! -d $USB_MOUNT/backup/gnupg ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  873. echo " mkdir -p $USB_MOUNT/backup/gnupg" >> /usr/bin/$BACKUP_SCRIPT_NAME
  874. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  875. echo " rsyncrypto -v -r /home/$MY_USERNAME/.gnupg $USB_MOUNT/backup/gnupg $USB_MOUNT/backup/gnupg.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  876. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  877. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  878. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  879. echo ' exit 491' >> /usr/bin/$BACKUP_SCRIPT_NAME
  880. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  881. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  882. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  883. echo '# Backup ssh keys' >> /usr/bin/$BACKUP_SCRIPT_NAME
  884. echo "if [ -d /home/$MY_USERNAME/.ssh ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  885. echo ' echo "Backing up ssh keys"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  886. echo " if [ ! -d $USB_MOUNT/backup/ssh ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  887. echo " mkdir -p $USB_MOUNT/backup/ssh" >> /usr/bin/$BACKUP_SCRIPT_NAME
  888. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  889. echo " rsyncrypto -v -r /home/$MY_USERNAME/.ssh $USB_MOUNT/backup/ssh $USB_MOUNT/backup/ssh.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  890. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  891. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  892. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  893. echo ' exit 731' >> /usr/bin/$BACKUP_SCRIPT_NAME
  894. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  895. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  896. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  897. echo '# Backup web sites' >> /usr/bin/$BACKUP_SCRIPT_NAME
  898. echo "if [ -d /etc/nginx ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  899. echo ' echo "Backing up web settings"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  900. echo " if [ ! -d $USB_MOUNT/backup/web ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  901. echo " mkdir -p $USB_MOUNT/backup/web" >> /usr/bin/$BACKUP_SCRIPT_NAME
  902. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  903. echo " rsyncrypto -v -r /etc/nginx/sites-available $USB_MOUNT/backup/web $USB_MOUNT/backup/web.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  904. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  905. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  906. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  907. echo ' exit 848' >> /usr/bin/$BACKUP_SCRIPT_NAME
  908. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  909. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  910. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  911. echo '# Backup README file' >> /usr/bin/$BACKUP_SCRIPT_NAME
  912. echo "if [ -f /home/$MY_USERNAME/README ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  913. echo ' echo "Backing up README"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  914. echo " if [ ! -d $USB_MOUNT/backup/readme ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  915. echo " mkdir -p $USB_MOUNT/backup/readme" >> /usr/bin/$BACKUP_SCRIPT_NAME
  916. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  917. echo " if [ ! -d /home/$MY_USERNAME/tempbackup ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  918. echo " mkdir -p /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_SCRIPT_NAME
  919. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  920. echo " cp -f /home/$MY_USERNAME/README /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_SCRIPT_NAME
  921. echo " rsyncrypto -v -r /home/$MY_USERNAME/tempbackup $USB_MOUNT/backup/readme $USB_MOUNT/backup/readme.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  922. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  923. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  924. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  925. echo " rm -rf /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_SCRIPT_NAME
  926. echo ' exit 848' >> /usr/bin/$BACKUP_SCRIPT_NAME
  927. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  928. echo " rm -rf /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_SCRIPT_NAME
  929. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  930. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  931. echo '# Backup Mutt settings' >> /usr/bin/$BACKUP_SCRIPT_NAME
  932. echo "if [ -f /home/$MY_USERNAME/.muttrc ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  933. echo ' echo "Backing up Mutt settings"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  934. echo " if [ ! -d /home/$MY_USERNAME/tempbackup ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  935. echo " mkdir -p /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_SCRIPT_NAME
  936. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  937. echo " cp /home/$MY_USERNAME/.muttrc /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_SCRIPT_NAME
  938. echo ' if [ -f /etc/Muttrc ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  939. echo " cp /etc/Muttrc /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_SCRIPT_NAME
  940. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  941. echo " if [ ! -d $USB_MOUNT/backup/mutt ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  942. echo " mkdir -p $USB_MOUNT/backup/mutt" >> /usr/bin/$BACKUP_SCRIPT_NAME
  943. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  944. echo " rsyncrypto -v -r /home/$MY_USERNAME/tempbackup $USB_MOUNT/backup/mutt $USB_MOUNT/backup/mutt.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  945. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  946. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  947. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  948. echo ' rm -rf /home/$MY_USERNAME/tempbackup' >> /usr/bin/$BACKUP_SCRIPT_NAME
  949. echo ' exit 492' >> /usr/bin/$BACKUP_SCRIPT_NAME
  950. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  951. echo ' rm -rf /home/$MY_USERNAME/tempbackup' >> /usr/bin/$BACKUP_SCRIPT_NAME
  952. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  953. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  954. echo '# Backup procmail settings' >> /usr/bin/$BACKUP_SCRIPT_NAME
  955. echo "if [ -f /home/$MY_USERNAME/.procmailrc ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  956. echo ' echo "Backing up procmail settings"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  957. echo " if [ ! -d /home/$MY_USERNAME/tempbackup ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  958. echo " mkdir -p /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_SCRIPT_NAME
  959. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  960. echo " cp /home/$MY_USERNAME/.procmailrc /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_SCRIPT_NAME
  961. echo " if [ ! -d $USB_MOUNT/backup/procmail ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  962. echo " mkdir -p $USB_MOUNT/backup/procmail" >> /usr/bin/$BACKUP_SCRIPT_NAME
  963. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  964. echo " rsyncrypto -v -r /home/$MY_USERNAME/tempbackup $USB_MOUNT/backup/procmail $USB_MOUNT/backup/procmail.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  965. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  966. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  967. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  968. echo ' rm -rf /home/$MY_USERNAME/tempbackup' >> /usr/bin/$BACKUP_SCRIPT_NAME
  969. echo ' exit 492' >> /usr/bin/$BACKUP_SCRIPT_NAME
  970. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  971. echo ' rm -rf /home/$MY_USERNAME/tempbackup' >> /usr/bin/$BACKUP_SCRIPT_NAME
  972. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  973. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  974. echo '# Backup email' >> /usr/bin/$BACKUP_SCRIPT_NAME
  975. echo "if [ -d /home/$MY_USERNAME/Maildir ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  976. echo ' echo "Backing up emails"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  977. echo " if [ ! -d $USB_MOUNT/backup/mail ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  978. echo " mkdir -p $USB_MOUNT/backup/mail" >> /usr/bin/$BACKUP_SCRIPT_NAME
  979. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  980. echo " rsyncrypto -v -r /home/$MY_USERNAME/Maildir $USB_MOUNT/backup/mail $USB_MOUNT/backup/mail.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  981. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  982. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  983. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  984. echo ' exit 396' >> /usr/bin/$BACKUP_SCRIPT_NAME
  985. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  986. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  987. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  988. echo '# Backup DLNA cache' >> /usr/bin/$BACKUP_SCRIPT_NAME
  989. echo "if [ -d /var/cache/minidlna ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  990. echo ' echo "Backing up DLNA cache"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  991. echo " if [ ! -d $USB_MOUNT/backup/dlna ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  992. echo " mkdir -p $USB_MOUNT/backup/dlna" >> /usr/bin/$BACKUP_SCRIPT_NAME
  993. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  994. echo " rsyncrypto -v -r /var/cache/minidlna $USB_MOUNT/backup/dlna $USB_MOUNT/backup/dlna.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  995. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  996. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  997. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  998. echo ' exit 498' >> /usr/bin/$BACKUP_SCRIPT_NAME
  999. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1000. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1001. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1002. if [[ $BACKUP_INCLUDES_DATABASES == "yes" ]]; then
  1003. echo '# Mysql settings' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1004. echo "if [ ! -d $USB_MOUNT/backup/mariadb ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  1005. echo " mkdir -p $USB_MOUNT/backup/mariadb" >> /usr/bin/$BACKUP_SCRIPT_NAME
  1006. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1007. echo 'if [ ! -d /root/tempmariadb ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1008. echo ' mkdir /root/tempmariadb' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1009. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1010. echo 'mysqldump --password=$DATABASE_PASSWORD mysql user > /root/tempmariadb/mysql.sql' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1011. echo "if [ ! -s /root/tempmariadb/mysql.sql ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  1012. echo ' echo "Unable to backup mysql settings"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1013. echo ' rm -rf /root/tempmariadb' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1014. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  1015. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  1016. echo ' exit 653' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1017. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1018. echo 'echo "$DATABASE_PASSWORD" > /root/tempmariadb/db' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1019. echo 'chmod 400 /root/tempmariadb/db' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1020. echo "rsyncrypto -v -r /root/tempmariadb $USB_MOUNT/backup/mariadb $USB_MOUNT/backup/mariadb.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  1021. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1022. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  1023. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  1024. echo ' exit 794' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1025. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1026. echo 'shred -zu /root/tempmariadb/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1027. echo 'rm -rf /root/tempmariadb' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1028. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1029. fi
  1030. echo 'sync' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1031. echo "umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  1032. echo "rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  1033. echo 'echo "Backup to USB drive is complete. You can now unplug it."' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1034. echo 'exit 0' >> /usr/bin/$BACKUP_SCRIPT_NAME
  1035. chmod 400 /usr/bin/$BACKUP_SCRIPT_NAME
  1036. chmod +x /usr/bin/$BACKUP_SCRIPT_NAME
  1037. echo 'create_backup_script' >> $COMPLETION_FILE
  1038. }
  1039. function create_restore_script {
  1040. if grep -Fxq "create_restore_script" $COMPLETION_FILE; then
  1041. return
  1042. fi
  1043. apt-get -y --force-yes install rsyncrypto
  1044. get_mariadb_password
  1045. get_mariadb_gnusocial_admin_password
  1046. get_mariadb_redmatrix_admin_password
  1047. get_mariadb_owncloud_admin_password
  1048. echo '#!/bin/bash' > /usr/bin/$RESTORE_SCRIPT_NAME
  1049. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1050. echo "if [ ! -b $USB_DRIVE ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1051. echo ' echo "Please attach a USB drive"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1052. echo ' exit 1' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1053. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1054. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1055. echo "if [ ! -d $USB_MOUNT ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1056. echo " mkdir $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1057. echo " mount $USB_DRIVE $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1058. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1059. echo "if [ ! -d $USB_MOUNT/backup ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1060. echo ' echo "No backup directory found on the USB drive."' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1061. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1062. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1063. echo ' exit 2' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1064. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1065. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1066. echo 'echo "Checking that user exists"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1067. echo "if [ ! -d /home/$MY_USERNAME ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1068. echo " echo 'Username $MY_USERNAME not found. Reinstall Freedombone with this username.'" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1069. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1070. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1071. echo ' exit 295' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1072. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1073. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1074. echo 'echo "Copying GPG keys to root"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1075. echo "cp -r /home/$MY_USERNAME/.gnupg /root" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1076. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1077. echo "if [ -f $USB_MOUNT/backup/key.gpg ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1078. echo " if [ -f $BACKUP_CERTIFICATE.new ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1079. echo " rm $BACKUP_CERTIFICATE.new" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1080. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1081. echo " cp $USB_MOUNT/backup/key.gpg /root/tempbackupkey.gpg" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1082. echo " gpg /root/tempbackupkey.gpg" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1083. echo " if [ -f /root/tempbackupkey ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1084. echo ' echo "Backup key decrypted"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1085. echo " cp /root/tempbackupkey $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1086. echo " shred -zu /root/tempbackupkey" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1087. echo " chmod 400 $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1088. echo ' echo "Backup certificate installed"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1089. echo ' else' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1090. echo ' echo "Unable to decrypt the backup key"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1091. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1092. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1093. echo ' exit 735' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1094. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1095. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1096. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1097. echo "if [ ! -f $BACKUP_CERTIFICATE ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1098. echo " echo 'No backup key was found. Copy your backup key to $BACKUP_CERTIFICATE'" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1099. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1100. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1101. echo ' exit 563' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1102. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1103. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1104. echo '# MariaDB password' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1105. echo -n 'DATABASE_PASSWORD=$(cat ' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1106. echo "$DATABASE_PASSWORD_FILE)" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1107. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1108. echo '# Make a backup of the original README file' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1109. echo '# incase old passwords need to be used' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1110. echo "if [ -f /home/$MY_USERNAME/README ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1111. echo " if [ ! -f /home/$MY_USERNAME/README_original ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1112. echo " cp /home/$MY_USERNAME/README /home/$MY_USERNAME/README_original" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1113. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1114. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1115. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1116. if [[ $BACKUP_INCLUDES_DATABASES == "yes" ]]; then
  1117. echo "if [ -d $USB_MOUNT/backup/mariadb ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1118. echo ' echo "Restoring mysql settings"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1119. echo ' if [ ! -d /root/tempmariadb ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1120. echo ' mkdir /root/tempmariadb' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1121. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1122. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/mariadb /root/tempmariadb $USB_MOUNT/backup/mariadb.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1123. echo ' echo "Get the MariaDB password from the backup"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1124. echo ' if [ ! -f /root/tempmariadb/usb/backup/mariadb/tempmariadb/db ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1125. echo ' echo "MariaDB password file not found"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1126. echo ' exit 495' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1127. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1128. echo ' BACKUP_MARIADB_PASSWORD=$(cat /root/tempmariadb/usb/backup/mariadb/tempmariadb/db)' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1129. echo ' if [[ $BACKUP_MARIADB_PASSWORD != $DATABASE_PASSWORD ]]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1130. echo ' echo "Restore the MariaDB user table"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1131. echo ' mysqlsuccess=$(mysql -u root --password=$DATABASE_PASSWORD mysql -o < /root/tempmariadb/usb/backup/mariadb/tempmariadb/mysql.sql)' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1132. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1133. echo ' echo "Try again using the password obtained from backup"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1134. echo ' mysqlsuccess=$(mysql -u root --password=$BACKUP_MARIADB_PASSWORD mysql -o < /root/tempmariadb/usb/backup/mariadb/tempmariadb/mysql.sql)' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1135. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1136. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1137. echo ' echo "$mysqlsuccess"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1138. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1139. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1140. echo ' exit 962' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1141. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1142. echo ' echo "Restarting database"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1143. echo ' service mysql restart' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1144. echo ' echo "Change the MariaDB password to the backup version"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1145. echo ' DATABASE_PASSWORD=$BACKUP_MARIADB_PASSWORD' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1146. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1147. echo ' shred -zu /root/tempmariadb/usb/backup/mariadb/tempmariadb/db' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1148. echo ' rm -rf /root/tempmariadb' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1149. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1150. echo ' # Change database password file' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1151. echo -n ' echo "$DATABASE_PASSWORD" > ' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1152. echo "$DATABASE_PASSWORD_FILE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1153. echo " chmod 600 $DATABASE_PASSWORD_FILE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1154. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1155. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1156. fi
  1157. echo "if [ -d $USB_MOUNT/backup/mutt ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1158. echo ' echo "Restoring Mutt settings"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1159. echo ' mkdir /root/tempmutt' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1160. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/mutt /root/tempmutt $USB_MOUNT/backup/mutt.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1161. echo " if [ -f /root/tempmutt/usb/backup/mutt/$MY_USERNAME/tempbackup/.muttrc ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1162. echo " cp -f /root/tempmutt/usb/backup/mutt/$MY_USERNAME/tempbackup/.muttrc /home/$MY_USERNAME/.muttrc" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1163. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1164. echo " if [ -f /root/tempmutt/usb/backup/mutt/$MY_USERNAME/tempbackup/Muttrc ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1165. echo " cp -f /root/tempmutt/usb/backup/mutt/$MY_USERNAME/tempbackup/Muttrc /etc/Muttrc" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1166. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1167. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1168. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1169. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1170. echo ' rm -rf /root/tempmutt' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1171. echo ' exit 276' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1172. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1173. echo ' rm -rf /root/tempmutt' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1174. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1175. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1176. echo "if [ -d $USB_MOUNT/backup/gnupg ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1177. echo ' echo "Restoring gnupg settings"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1178. echo ' mkdir /root/tempgnupg' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1179. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/gnupg /root/tempgnupg $USB_MOUNT/backup/gnupg.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1180. echo " cp -r /root/tempgnupg/usb/backup/gnupg/$MY_USERNAME/.gnupg /home/$MY_USERNAME/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1181. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1182. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1183. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1184. echo ' rm -rf /root/tempgnupg' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1185. echo ' exit 276' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1186. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1187. echo ' rm -rf /root/tempgnupg' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1188. echo " cp -r /home/$MY_USERNAME/.gnupg /root" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1189. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1190. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1191. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1192. echo ' exit 283' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1193. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1194. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1195. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1196. echo "if [ -d $USB_MOUNT/backup/procmail ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1197. echo ' echo "Restoring procmail settings"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1198. echo ' mkdir /root/tempprocmail' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1199. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/procmail /root/tempprocmail $USB_MOUNT/backup/procmail.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1200. echo " cp -f /root/tempprocmail/usb/backup/procmail/$MY_USERNAME/tempbackup/.procmailrc /home/$MY_USERNAME/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1201. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1202. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1203. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1204. echo ' rm -rf /root/tempprocmail' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1205. echo ' exit 276' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1206. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1207. echo ' rm -rf /root/tempprocmail' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1208. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1209. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1210. echo "if [ -d $USB_MOUNT/backup/readme ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1211. echo ' echo "Restoring README"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1212. echo ' mkdir /root/tempreadme' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1213. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/readme /root/tempreadme $USB_MOUNT/backup/readme.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1214. echo " cp -f /root/tempreadme/usb/backup/readme/$MY_USERNAME/tempbackup/README /home/$MY_USERNAME/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1215. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1216. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1217. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1218. echo ' rm -rf /root/tempreadme' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1219. echo ' exit 276' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1220. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1221. echo ' rm -rf /root/tempreadme' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1222. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1223. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1224. echo "if [ -d $USB_MOUNT/backup/ssh ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1225. echo ' echo "Restoring ssh keys"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1226. echo ' mkdir /root/tempssh' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1227. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/ssh /root/tempssh $USB_MOUNT/backup/ssh.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1228. echo " cp -r /root/tempssh/usb/backup/ssh/$MY_USERNAME/.ssh /home/$MY_USERNAME/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1229. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1230. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1231. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1232. echo ' rm -rf /root/tempssh' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1233. echo ' exit 664' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1234. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1235. echo ' rm -rf /root/tempssh' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1236. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1237. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1238. echo "if [ -d $USB_MOUNT/backup/ssl ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1239. echo ' echo "Restoring certificates"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1240. echo ' mkdir /root/tempssl' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1241. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/ssl /root/tempssl $USB_MOUNT/backup/ssl.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1242. echo ' cp -r /root/tempssl/usb/backup/ssl/ssl/* /etc/ssl' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1243. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1244. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1245. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1246. echo ' exit 276' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1247. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1248. echo ' rm -rf /root/tempssl' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1249. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1250. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1251. echo "if [ -d $USB_MOUNT/backup/projects ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1252. echo ' echo "Restoring projects"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1253. echo ' mkdir /root/tempprojects' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1254. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/projects /root/tempprojects $USB_MOUNT/backup/projects.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1255. echo " if [ -d /home/$MY_USERNAME/projects ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1256. echo ' rm -rf /home/$MY_USERNAME/projects' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1257. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1258. echo " mv /root/tempprojects/usb/backup/projects/$MY_USERNAME/projects /home/$MY_USERNAME" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1259. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1260. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1261. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1262. echo ' exit 166' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1263. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1264. echo ' rm -rf /root/tempprojects' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1265. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1266. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1267. echo "if [ -d $USB_MOUNT/backup/personal ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1268. echo ' echo "Restoring personal settings"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1269. echo ' mkdir /root/temppersonal' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1270. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/personal /root/temppersonal $USB_MOUNT/backup/personal.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1271. echo " if [ -d /home/$MY_USERNAME/personal ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1272. echo ' rm -rf /home/$MY_USERNAME/personal' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1273. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1274. echo " mv /root/temppersonal/usb/backup/personal/$MY_USERNAME/personal /home/$MY_USERNAME" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1275. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1276. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1277. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1278. echo ' exit 184' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1279. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1280. echo ' rm -rf /root/temppersonal' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1281. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1282. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1283. echo "if [ -d $PUBLIC_MAILING_LIST_DIRECTORY ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1284. echo ' echo "Restoring public mailing list"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1285. echo ' mkdir /root/tempmailinglist' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1286. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/mailinglist /root/tempmailinglist $USB_MOUNT/backup/mailinglist.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1287. echo " cp -r /root/tempmailinglist/usb/backup/mailinglist/spool/mlmmj/* $PUBLIC_MAILING_LIST_DIRECTORY" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1288. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1289. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1290. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1291. echo ' exit 526' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1292. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1293. echo ' rm -rf /root/tempmailinglist' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1294. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1295. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1296. echo "if [ -d $XMPP_DIRECTORY ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1297. echo ' echo "Restoring XMPP settings"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1298. echo ' mkdir /root/tempxmpp' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1299. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/xmpp /root/tempxmpp $USB_MOUNT/backup/xmpp.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1300. echo " cp -r /root/tempxmpp/usb/backup/xmpp/lib/prosody/* $XMPP_DIRECTORY" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1301. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1302. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1303. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1304. echo ' exit 725' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1305. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1306. echo ' rm -rf /root/tempxmpp' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1307. echo ' service prosody restart' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1308. echo ' chown -R prosody:prosody /var/lib/prosody/*' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1309. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1310. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1311. BACKUP_INCLUDES_WEBSITES="no"
  1312. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  1313. BACKUP_INCLUDES_WEBSITES="yes"
  1314. echo "if [ -d $USB_MOUNT/backup/gnusocial ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1315. echo ' echo "Restoring microblog database"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1316. echo ' if [ ! -d /root/tempgnusocialdata ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1317. echo ' mkdir /root/tempgnusocialdata' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1318. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1319. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/gnusocialdata /root/tempgnusocialdata $USB_MOUNT/backup/gnusocialdata.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1320. echo ' if [ ! -f /root/tempgnusocialdata/usb/backup/gnusocialdata/tempgnusocialdata/gnusocial.sql ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1321. echo ' echo "Unable to restore microblog database"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1322. echo ' rm -rf /root/tempgnusocialdata' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1323. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1324. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1325. echo ' exit 503' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1326. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1327. echo ' mysqlsuccess=$(mysql -u root --password=$DATABASE_PASSWORD gnusocial -o < /root/tempgnusocialdata/usb/backup/gnusocialdata/tempgnusocialdata/gnusocial.sql)' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1328. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1329. echo ' echo "$mysqlsuccess"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1330. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1331. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1332. echo ' exit 964' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1333. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1334. echo ' shred -zu /root/tempgnusocialdata/usb/backup/gnusocialdata/tempgnusocialdata/*' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1335. echo ' rm -rf /root/tempgnusocialdata' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1336. echo ' echo "Restoring microblog installation"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1337. echo ' if [ ! -d /root/tempgnusocial ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1338. echo ' mkdir /root/tempgnusocial' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1339. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1340. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/gnusocial /root/tempgnusocial $USB_MOUNT/backup/gnusocial.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1341. echo " rm -rf /var/www/$MICROBLOG_DOMAIN_NAME/htdocs" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1342. echo " mv /root/tempgnusocial/usb/backup/gnusocial/www/$MICROBLOG_DOMAIN_NAME/htdocs /var/www/$MICROBLOG_DOMAIN_NAME/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1343. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1344. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1345. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1346. echo ' exit 683' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1347. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1348. echo ' rm -rf /root/tempgnusocial' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1349. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1350. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1351. fi
  1352. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  1353. BACKUP_INCLUDES_WEBSITES="yes"
  1354. echo "if [ -d $USB_MOUNT/backup/redmatrix ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1355. echo ' echo "Restoring Red Matrix database"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1356. echo ' if [ ! -d /root/tempredmatrixdata ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1357. echo ' mkdir /root/tempredmatrixdata' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1358. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1359. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/redmatrixdata /root/tempredmatrixdata $USB_MOUNT/backup/redmatrixdata.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1360. echo ' if [ ! -f /root/tempredmatrixdata/usb/backup/redmatrixdata/tempredmatrixdata/redmatrix.sql ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1361. echo ' echo "Unable to restore Red Matrix database"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1362. echo ' rm -rf /root/tempredmatrixdata' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1363. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1364. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1365. echo ' exit 504' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1366. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1367. echo ' mysqlsuccess=$(mysql -u root --password=$DATABASE_PASSWORD redmatrix -o < /root/tempredmatrixdata/usb/backup/redmatrixdata/tempredmatrixdata/redmatrix.sql)' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1368. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1369. echo ' echo "$mysqlsuccess"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1370. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1371. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1372. echo ' exit 965' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1373. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1374. echo ' shred -zu /root/tempredmatrixdata/usb/backup/redmatrixdata/tempredmatrixdata/*' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1375. echo ' rm -rf /root/tempredmatrixdata' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1376. echo ' echo "Restoring Red Matrix installation"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1377. echo ' if [ ! -d /root/tempredmatrix ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1378. echo ' mkdir /root/tempredmatrix' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1379. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1380. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/redmatrix /root/tempredmatrix $USB_MOUNT/backup/redmatrix.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1381. echo " rm -rf /var/www/$REDMATRIX_DOMAIN_NAME/htdocs" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1382. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1383. echo " cp -r /root/tempredmatrix/usb/backup/redmatrix/www/$REDMATRIX_DOMAIN_NAME/htdocs/* /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1384. echo ' else' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1385. echo " mv /root/tempredmatrix/usb/backup/redmatrix/www/$REDMATRIX_DOMAIN_NAME/htdocs /var/www/$REDMATRIX_DOMAIN_NAME/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1386. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1387. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1388. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1389. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1390. echo ' exit 759' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1391. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1392. echo ' rm -rf /root/tempredmatrix' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1393. echo " chmod 777 /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]/smarty3" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1394. echo " chown -R www-data:www-data /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/*" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1395. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1396. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1397. fi
  1398. if grep -Fxq "install_owncloud" $COMPLETION_FILE; then
  1399. BACKUP_INCLUDES_WEBSITES="yes"
  1400. echo "if [ -d $USB_MOUNT/backup/owncloud ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1401. echo ' echo "Restoring owncloud database"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1402. echo ' if [ ! -d /root/tempownclouddata ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1403. echo ' mkdir /root/tempownclouddata' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1404. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1405. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/ownclouddata /root/tempownclouddata $USB_MOUNT/backup/ownclouddata.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1406. echo ' if [ ! -f /root/tempownclouddata/usb/backup/ownclouddata/tempownclouddata/owncloud.sql ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1407. echo ' echo "Unable to restore Owncloud database"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1408. echo ' rm -rf /root/tempownclouddata' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1409. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1410. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1411. echo ' exit 505' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1412. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1413. echo ' mysqlsuccess=$(mysql -u root --password=$DATABASE_PASSWORD owncloud -o < /root/tempownclouddata/usb/backup/ownclouddata/tempownclouddata/owncloud.sql)' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1414. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1415. echo ' echo "$mysqlsuccess"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1416. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1417. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1418. echo ' exit 965' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1419. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1420. echo ' echo "Restoring Owncloud installation"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1421. echo ' if [ ! -d /root/tempowncloud ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1422. echo ' mkdir /root/tempowncloud' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1423. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1424. echo ' if [ ! -d /root/tempowncloud2 ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1425. echo ' mkdir /root/tempowncloud2' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1426. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1427. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/owncloud /root/tempowncloud $USB_MOUNT/backup/owncloud.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1428. echo " cp -r /root/tempowncloud/usb/backup/owncloud/lib/owncloud/* /var/lib/owncloud/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1429. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1430. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1431. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1432. echo ' exit 981' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1433. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1434. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/owncloud2 /root/tempowncloud2 $USB_MOUNT/backup/owncloud2.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1435. echo " cp -r /root/tempowncloud2/usb/backup/owncloud2/owncloud/* /etc/owncloud/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1436. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1437. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1438. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1439. echo ' exit 982' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1440. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1441. echo ' rm -rf /root/tempowncloud' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1442. echo ' rm -rf /root/tempowncloud2' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1443. echo ' rm -rf /root/tempownclouddata' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1444. echo ' chown -R www-data:www-data /var/lib/owncloud/data' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1445. echo ' chown -R www-data:www-data /var/lib/owncloud/backup' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1446. echo ' chown -R www-data:www-data /var/lib/owncloud/assets' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1447. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1448. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1449. fi
  1450. echo "if [ -d $USB_MOUNT/backup/wiki ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1451. echo ' echo "Restoring Wiki installation"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1452. echo ' mkdir /root/tempwiki' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1453. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/wiki /root/tempwiki $USB_MOUNT/backup/wiki.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1454. echo " cp -r /root/tempwiki/usb/backup/wiki/lib/dokuwiki/* /var/lib/dokuwiki/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1455. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1456. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1457. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1458. echo ' exit 868' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1459. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1460. echo ' mkdir /root/tempwiki2' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1461. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/wiki2 /root/tempwiki2 $USB_MOUNT/backup/wiki2.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1462. echo " cp -r /root/tempwiki2/usb/backup/wiki2/dokuwiki/* /etc/dokuwiki/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1463. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1464. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1465. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1466. echo ' exit 869' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1467. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1468. echo ' rm -rf /root/tempwiki' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1469. echo ' rm -rf /root/tempwiki2' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1470. echo ' chown -R www-data:www-data /var/lib/dokuwiki/*' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1471. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1472. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1473. echo "if [ -d $USB_MOUNT/backup/blog ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1474. echo ' echo "Restoring blog installation"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1475. echo ' mkdir /root/tempblog' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1476. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/blog /root/tempblog $USB_MOUNT/backup/blog.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1477. echo " rm -rf /var/www/$FULLBLOG_DOMAIN_NAME/htdocs" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1478. echo " cp -r /root/tempblog/usb/backup/blog/www/$FULLBLOG_DOMAIN_NAME/htdocs /var/www/$FULLBLOG_DOMAIN_NAME/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1479. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1480. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1481. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1482. echo ' exit 593' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1483. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1484. echo ' rm -rf /root/tempblog' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1485. echo " if [ ! -d /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/content ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1486. echo ' echo "No content directory found after restoring blog"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1487. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1488. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1489. echo ' exit 287' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1490. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1491. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1492. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1493. echo "if [ -d $USB_MOUNT/backup/mail ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1494. echo ' echo "Restoring emails"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1495. echo ' mkdir /root/tempmail' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1496. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/mail /root/tempmail $USB_MOUNT/backup/mail.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1497. echo " if [ ! -d /home/$MY_USERNAME/Maildir ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1498. echo " mkdir /home/$MY_USERNAME/Maildir" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1499. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1500. echo " cp -r /root/tempmail/usb/backup/mail/$MY_USERNAME/Maildir/* /home/$MY_USERNAME/Maildir/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1501. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1502. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1503. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1504. echo ' exit 927' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1505. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1506. echo ' rm -rf /root/tempmail' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1507. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1508. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1509. echo "if [ -d /var/cache/minidlna ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1510. echo " if [ -d $USB_MOUNT/backup/dlna ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1511. echo ' echo "Restoring DLNA cache"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1512. echo ' mkdir /root/tempdlna' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1513. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/dlna /root/tempdlna $USB_MOUNT/backup/dlna.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1514. echo " cp -r /root/tempdlna/usb/backup/dlna/cache/minidlna/* /var/cache/minidlna/" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1515. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1516. echo " umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1517. echo " rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1518. echo ' exit 982' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1519. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1520. echo ' rm -rf /root/tempdlna' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1521. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1522. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1523. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1524. echo 'sync' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1525. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1526. echo "# Unmount the USB drive" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1527. echo "umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1528. echo "rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1529. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1530. if [[ $BACKUP_INCLUDES_WEBSITES == "yes" ]]; then
  1531. echo "# Restart the web server" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1532. echo "service nginx restart" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1533. echo "service php5-fpm restart" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1534. fi
  1535. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1536. echo 'echo "Setting permissions"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1537. echo "chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME" >> /usr/bin/$RESTORE_SCRIPT_NAME
  1538. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1539. echo 'echo "Restore from USB drive is complete. You can now remove it."' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1540. echo 'exit 0' >> /usr/bin/$RESTORE_SCRIPT_NAME
  1541. chmod 400 /usr/bin/$RESTORE_SCRIPT_NAME
  1542. chmod +x /usr/bin/$RESTORE_SCRIPT_NAME
  1543. echo 'create_restore_script' >> $COMPLETION_FILE
  1544. }
  1545. function backup_to_friends_servers {
  1546. if grep -Fxq "backup_to_friends_servers" $COMPLETION_FILE; then
  1547. return
  1548. fi
  1549. if [ ! $FRIENDS_SERVERS_LIST ]; then
  1550. return
  1551. fi
  1552. apt-get -y --force-yes install rsyncrypto sshpass
  1553. get_mariadb_password
  1554. get_mariadb_gnusocial_admin_password
  1555. get_mariadb_redmatrix_admin_password
  1556. get_mariadb_owncloud_admin_password
  1557. if ! grep -q "backups on friends servers" /home/$MY_USERNAME/README; then
  1558. echo '' >> /home/$MY_USERNAME/README
  1559. echo '' >> /home/$MY_USERNAME/README
  1560. echo 'Backups' >> /home/$MY_USERNAME/README
  1561. echo '=======' >> /home/$MY_USERNAME/README
  1562. echo 'Key file: /root/backupkey' >> /home/$MY_USERNAME/README
  1563. echo "To add friends servers create a file called $FRIENDS_SERVERS_LIST" >> /home/$MY_USERNAME/README
  1564. echo 'and add entries like this:' >> /home/$MY_USERNAME/README
  1565. echo '' >> /home/$MY_USERNAME/README
  1566. echo "username1@domain1:$SSH_PORT//home/username1 ssh_password1" >> /home/$MY_USERNAME/README
  1567. echo "username2@domain2:$SSH_PORT//home/username2 ssh_password2" >> /home/$MY_USERNAME/README
  1568. echo '...' >> /home/$MY_USERNAME/README
  1569. echo '' >> /home/$MY_USERNAME/README
  1570. echo 'The system will try to backup to these remote locations once per day.' >> /home/$MY_USERNAME/README
  1571. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  1572. fi
  1573. echo '#!/bin/bash' > /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1574. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1575. echo '# Temporary location for data to be backed up to other servers' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1576. echo 'SERVER_DIRECTORY=/root/remotebackup' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1577. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1578. echo "if [ ! -f $BACKUP_CERTIFICATE ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1579. echo ' echo "Creating backup key"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1580. echo ' makecert backup' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1581. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1582. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1583. echo "if [ ! -f $FRIENDS_SERVERS_LIST ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1584. echo ' exit 1' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1585. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1586. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1587. echo '# MariaDB password' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1588. echo -n 'DATABASE_PASSWORD=$(cat ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1589. echo "$DATABASE_PASSWORD_FILE)" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1590. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1591. echo '# local directory where the backup will be made' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1592. echo 'if [ ! -d $SERVER_DIRECTORY ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1593. echo ' mkdir $SERVER_DIRECTORY' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1594. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1595. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1596. echo 'if [ ! -d $SERVER_DIRECTORY/backup ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1597. echo ' mkdir -p $SERVER_DIRECTORY/backup' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1598. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1599. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1600. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  1601. BACKUP_INCLUDES_DATABASES="yes"
  1602. echo 'if [ ! -d $SERVER_DIRECTORY/backup/gnusocial ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1603. echo ' mkdir -p $SERVER_DIRECTORY/backup/gnusocial' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1604. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1605. echo 'if [ ! -d $SERVER_DIRECTORY/backup/gnusocialdata ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1606. echo ' mkdir -p $SERVER_DIRECTORY/backup/gnusocialdata' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1607. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1608. echo "if [ ! -d /root/tempgnusocialdata ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1609. echo " mkdir -p /root/tempgnusocialdata" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1610. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1611. echo 'echo "Obtaining GNU Social database backup"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1612. echo 'mysqldump --password=$DATABASE_PASSWORD gnusocial > /root/tempgnusocialdata/gnusocial.sql' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1613. echo "if [ ! -s /root/tempgnusocialdata/gnusocial.sql ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1614. echo ' echo "GNU social database could not be saved"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1615. echo ' if [ ! $DATABASE_PASSWORD ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1616. echo " echo 'No MariaDB password was given'" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1617. echo " fi" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1618. echo ' shred -zu /root/tempgnusocialdata/*' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1619. echo ' rm -rf /root/tempgnusocialdata' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1620. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1621. echo -n ' echo "Unable to export gnusocial database" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1622. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1623. echo ' exit 296' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1624. echo "fi" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1625. echo -n 'rsyncrypto -v -r /root/tempgnusocialdata $SERVER_DIRECTORY/backup/gnusocialdata $SERVER_DIRECTORY/backup/gnusocialdata.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1626. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1627. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1628. echo ' shred -zu /root/tempgnusocialdata/*' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1629. echo ' rm -rf /root/tempgnusocialdata' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1630. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1631. echo -n ' echo "Unable to encrypt gnusocial database" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1632. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1633. echo ' exit 853' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1634. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1635. echo 'shred -zu /root/tempgnusocialdata/*' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1636. echo 'rm -rf /root/tempgnusocialdata' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1637. echo 'echo "Backing up GNU social installation"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1638. echo -n "rsyncrypto -v -r /var/www/$MICROBLOG_DOMAIN_NAME/htdocs " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1639. echo -n '$SERVER_DIRECTORY/backup/gnusocial $SERVER_DIRECTORY/backup/gnusocial.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1640. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1641. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1642. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1643. echo -n ' echo "Unable to encrypt gnusocial installation" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1644. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1645. echo ' exit 846' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1646. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1647. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1648. fi
  1649. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  1650. BACKUP_INCLUDES_DATABASES="yes"
  1651. echo 'if [ ! -d $SERVER_DIRECTORY/backup/redmatrix ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1652. echo ' mkdir -p $SERVER_DIRECTORY/backup/redmatrix' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1653. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1654. echo 'if [ ! -d $SERVER_DIRECTORY/backup/redmatrixdata ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1655. echo ' mkdir -p $SERVER_DIRECTORY/backup/redmatrixdata' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1656. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1657. echo "if [ ! -d /root/tempredmatrixdata ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1658. echo " mkdir -p /root/tempredmatrixdata" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1659. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1660. echo 'echo "Obtaining Red Matrix database backup"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1661. echo 'mysqldump --password=$DATABASE_PASSWORD redmatrix > /root/tempredmatrixdata/redmatrix.sql' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1662. echo "if [ ! -s /root/tempredmatrixdata/redmatrix.sql ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1663. echo ' echo "Red Matrix database could not be saved"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1664. echo ' if [ ! $DATABASE_PASSWORD ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1665. echo " echo 'No MariaDB password was given'" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1666. echo " fi" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1667. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1668. echo -n ' echo "Unable to export redmatrix database" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1669. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1670. echo ' exit 378' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1671. echo "fi" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1672. echo -n 'rsyncrypto -v -r /root/tempredmatrixdata $SERVER_DIRECTORY/backup/redmatrixdata $SERVER_DIRECTORY/backup/redmatrixdata.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1673. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1674. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1675. echo ' shred -zu /root/tempredmatrixdata/*' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1676. echo ' rm -rf /root/tempredmatrixdata' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1677. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1678. echo -n ' echo "Unable to encrypt redmatrix database" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1679. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1680. echo ' exit 285' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1681. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1682. echo 'shred -zu /root/tempredmatrixdata/*' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1683. echo 'rm -rf /root/tempredmatrixdata' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1684. echo 'echo "Backing up Red Matrix installation"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1685. echo -n "rsyncrypto -v -r /var/www/$REDMATRIX_DOMAIN_NAME/htdocs " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1686. echo -n '$SERVER_DIRECTORY/backup/redmatrix $SERVER_DIRECTORY/backup/redmatrix.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1687. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1688. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1689. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1690. echo -n ' echo "Unable to encrypt redmatrix installation" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1691. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1692. echo ' exit 593' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1693. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1694. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1695. fi
  1696. if grep -Fxq "install_owncloud" $COMPLETION_FILE; then
  1697. BACKUP_INCLUDES_DATABASES="yes"
  1698. echo 'if [ ! -d $SERVER_DIRECTORY/backup/owncloud ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1699. echo ' mkdir -p $SERVER_DIRECTORY/backup/owncloud' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1700. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1701. echo 'if [ ! -d $SERVER_DIRECTORY/backup/owncloud2 ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1702. echo ' mkdir -p $SERVER_DIRECTORY/backup/owncloud2' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1703. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1704. echo 'if [ ! -d $SERVER_DIRECTORY/backup/ownclouddata ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1705. echo ' mkdir -p $SERVER_DIRECTORY/backup/ownclouddata' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1706. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1707. echo "if [ ! -d /root/tempownclouddata ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1708. echo " mkdir -p /root/tempownclouddata" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1709. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1710. echo 'mysqldump --password=$DATABASE_PASSWORD owncloud > /root/tempownclouddata/owncloud.sql' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1711. echo "if [ ! -s /root/tempownclouddata/owncloud.sql ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1712. echo ' echo "Owncloud database could not be saved"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1713. echo ' if [ ! $DATABASE_PASSWORD ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1714. echo " echo 'No MariaDB password was given'" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1715. echo " fi" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1716. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1717. echo -n ' echo "Unable to export owncloud database" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1718. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1719. echo ' exit 377' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1720. echo "fi" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1721. echo -n 'rsyncrypto -v -r /root/tempownclouddata $SERVER_DIRECTORY/backup/ownclouddata $SERVER_DIRECTORY/backup/ownclouddata.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1722. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1723. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1724. echo ' shred -zu /root/tempownclouddata/*' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1725. echo ' rm -rf /root/tempownclouddata' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1726. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1727. echo -n ' echo "Unable to encrypt owncloud database" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1728. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1729. echo ' exit 188' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1730. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1731. echo 'shred -zu /root/tempownclouddata/*' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1732. echo 'rm -rf /root/tempownclouddata' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1733. echo 'echo "Obtaining Owncloud data backup"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1734. echo -n 'rsyncrypto -v -r /var/lib/owncloud $SERVER_DIRECTORY/backup/owncloud $SERVER_DIRECTORY/backup/owncloud.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1735. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1736. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1737. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1738. echo -n ' echo "Unable to encrypt owncloud installation (/var/lib/owncloud)" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1739. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1740. echo ' exit 632' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1741. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1742. echo -n 'rsyncrypto -v -r /etc/owncloud $SERVER_DIRECTORY/backup/owncloud2 $SERVER_DIRECTORY/backup/owncloud2.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1743. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1744. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1745. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1746. echo -n ' echo "Unable to encrypt owncloud installation (/etc/owncloud)" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1747. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1748. echo ' exit 632' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1749. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1750. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1751. fi
  1752. if grep -Fxq "install_wiki" $COMPLETION_FILE; then
  1753. echo 'if [ ! -d $SERVER_DIRECTORY/backup/wiki ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1754. echo ' mkdir -p $SERVER_DIRECTORY/backup/wiki' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1755. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1756. echo 'if [ ! -d $SERVER_DIRECTORY/backup/wiki2 ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1757. echo ' mkdir -p $SERVER_DIRECTORY/backup/wiki2' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1758. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1759. echo 'echo "Obtaining wiki data backup"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1760. echo -n 'rsyncrypto -v -r /var/lib/dokuwiki $SERVER_DIRECTORY/backup/wiki $SERVER_DIRECTORY/backup/wiki.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1761. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1762. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1763. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1764. echo -n ' echo "Unable to encrypt wiki installation (/var/lib/dokuwiki)" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1765. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1766. echo ' exit 964' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1767. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1768. echo -n 'rsyncrypto -v -r /etc/dokuwiki $SERVER_DIRECTORY/backup/wiki2 $SERVER_DIRECTORY/backup/wiki2.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1769. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1770. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1771. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1772. echo -n ' echo "Unable to encrypt wiki installation (/etc/dokuwiki)" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1773. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1774. echo ' exit 964' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1775. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1776. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1777. fi
  1778. if grep -Fxq "install_blog" $COMPLETION_FILE; then
  1779. echo 'if [ ! -d $SERVER_DIRECTORY/backup/blog ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1780. echo ' mkdir -p $SERVER_DIRECTORY/backup/blog' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1781. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1782. echo 'echo "Obtaining blog backup"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1783. echo -n "rsyncrypto -v -r /var/www/$FULLBLOG_DOMAIN_NAME/htdocs " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1784. echo -n '$SERVER_DIRECTORY/backup/blog $SERVER_DIRECTORY/backup/blog.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1785. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1786. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1787. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1788. echo -n ' echo "Unable to encrypt blog installation" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1789. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1790. echo ' exit 854' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1791. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1792. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1793. fi
  1794. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1795. echo '# Backup certificates' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1796. echo "if [ -d /etc/ssl ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1797. echo ' echo "Backing up certificates"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1798. echo ' if [ ! -d $SERVER_DIRECTORY/backup/ssl ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1799. echo ' mkdir -p $SERVER_DIRECTORY/backup/ssl' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1800. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1801. echo -n ' rsyncrypto -v -r /etc/ssl $SERVER_DIRECTORY/backup/ssl $SERVER_DIRECTORY/backup/ssl.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1802. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1803. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1804. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1805. echo -n ' echo "Unable to encrypt ssl certificates" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1806. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1807. echo ' exit 343' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1808. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1809. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1810. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1811. echo '# Backup projects' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1812. echo "if [ -d /home/$MY_USERNAME/projects ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1813. echo ' echo "Backing up projects"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1814. echo ' if [ ! -d $SERVER_DIRECTORY/backup/projects ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1815. echo ' mkdir -p $SERVER_DIRECTORY/backup/projects' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1816. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1817. echo -n " rsyncrypto -v -r /home/$MY_USERNAME/projects " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1818. echo -n '$SERVER_DIRECTORY/backup/projects $SERVER_DIRECTORY/backup/projects.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1819. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1820. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1821. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1822. echo -n ' echo "Unable to encrypt git projects" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1823. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1824. echo ' exit 873' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1825. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1826. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1827. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1828. echo '# Backup personal settings' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1829. echo "if [ -d /home/$MY_USERNAME/personal ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1830. echo ' echo "Backing up personal settings"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1831. echo ' if [ ! -d $SERVER_DIRECTORY/backup/personal ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1832. echo ' mkdir -p $SERVER_DIRECTORY/backup/personal' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1833. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1834. echo -n " rsyncrypto -v -r /home/$MY_USERNAME/personal " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1835. echo -n '$SERVER_DIRECTORY/backup/personal $SERVER_DIRECTORY/backup/personal.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1836. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1837. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1838. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1839. echo -n ' echo "Unable to encrypt personal settings" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1840. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1841. echo ' exit 649' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1842. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1843. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1844. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1845. echo '# Backup the public mailing list' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1846. echo "if [ -d $PUBLIC_MAILING_LIST_DIRECTORY ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1847. echo ' echo "Backing up the public mailing list"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1848. echo ' if [ ! -d $SERVER_DIRECTORY/backup/mailinglist ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1849. echo ' mkdir -p $SERVER_DIRECTORY/backup/mailinglist' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1850. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1851. echo -n " rsyncrypto -v -r $PUBLIC_MAILING_LIST_DIRECTORY " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1852. echo -n '$SERVER_DIRECTORY/backup/mailinglist $SERVER_DIRECTORY/backup/mailinglist.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1853. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1854. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1855. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1856. echo -n ' echo "Unable to encrypt public mailing list" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1857. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1858. echo ' exit 938' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1859. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1860. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1861. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1862. echo '# Backup xmpp settings' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1863. echo "if [ -d $XMPP_DIRECTORY ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1864. echo ' echo "Backing up the XMPP settings"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1865. echo ' if [ ! -d $SERVER_DIRECTORY/backup/xmpp ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1866. echo ' mkdir -p $SERVER_DIRECTORY/backup/xmpp' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1867. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1868. echo -n " rsyncrypto -v -r $XMPP_DIRECTORY " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1869. echo -n '$SERVER_DIRECTORY/backup/xmpp $SERVER_DIRECTORY/backup/xmpp.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1870. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1871. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1872. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1873. echo -n ' echo "Unable to encrypt XMPP settings" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1874. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1875. echo ' exit 593' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1876. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1877. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1878. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1879. echo '# Backup gpg keys' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1880. echo "if [ -d /home/$MY_USERNAME/.gnupg ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1881. echo ' echo "Backing up gpg keys"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1882. echo ' if [ ! -d $SERVER_DIRECTORY/backup/gnupg ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1883. echo ' mkdir -p $SERVER_DIRECTORY/backup/gnupg' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1884. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1885. echo -n " rsyncrypto -v -r /home/$MY_USERNAME/.gnupg " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1886. echo -n '$SERVER_DIRECTORY/backup/gnupg $SERVER_DIRECTORY/backup/gnupg.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1887. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1888. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1889. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1890. echo -n ' echo "Unable to encrypt gpg keys" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1891. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1892. echo ' exit 491' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1893. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1894. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1895. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1896. echo '# Backup ssh keys' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1897. echo "if [ -d /home/$MY_USERNAME/.ssh ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1898. echo ' echo "Backing up ssh keys"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1899. echo ' if [ ! -d $SERVER_DIRECTORY/backup/ssh ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1900. echo ' mkdir -p $SERVER_DIRECTORY/backup/ssh' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1901. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1902. echo -n " rsyncrypto -v -r /home/$MY_USERNAME/.ssh " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1903. echo -n '$SERVER_DIRECTORY/backup/ssh $SERVER_DIRECTORY/backup/ssh.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1904. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1905. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1906. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1907. echo -n ' echo "Unable to encrypt ssh keys" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1908. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1909. echo ' exit 731' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1910. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1911. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1912. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1913. echo '# Backup web sites' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1914. echo "if [ -d /etc/nginx ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1915. echo ' echo "Backing up web settings"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1916. echo ' if [ ! -d $SERVER_DIRECTORY/backup/web ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1917. echo ' mkdir -p $SERVER_DIRECTORY/backup/web' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1918. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1919. echo -n ' rsyncrypto -v -r /etc/nginx/sites-available $SERVER_DIRECTORY/backup/web $SERVER_DIRECTORY/backup/web.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1920. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1921. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1922. echo ' exit 848' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1923. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1924. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1925. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1926. echo '# Backup README file' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1927. echo "if [ -f /home/$MY_USERNAME/README ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1928. echo ' echo "Backing up README"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1929. echo ' if [ ! -d $SERVER_DIRECTORY/backup/readme ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1930. echo ' mkdir -p $SERVER_DIRECTORY/backup/readme' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1931. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1932. echo " if [ ! -d /home/$MY_USERNAME/tempbackup ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1933. echo " mkdir -p /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1934. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1935. echo " cp -f /home/$MY_USERNAME/README /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1936. echo -n " rsyncrypto -v -r /home/$MY_USERNAME/tempbackup " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1937. echo -n '$SERVER_DIRECTORY/backup/readme $SERVER_DIRECTORY/backup/readme.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1938. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1939. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1940. echo " rm -rf /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1941. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1942. echo -n ' echo "Unable to encrypt README file" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1943. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1944. echo ' exit 848' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1945. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1946. echo " rm -rf /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1947. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1948. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1949. echo '# Backup Mutt settings' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1950. echo "if [ -f /home/$MY_USERNAME/.muttrc ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1951. echo ' echo "Backing up Mutt settings"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1952. echo " if [ ! -d /home/$MY_USERNAME/tempbackup ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1953. echo " mkdir -p /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1954. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1955. echo " cp /home/$MY_USERNAME/.muttrc /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1956. echo ' if [ -f /etc/Muttrc ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1957. echo " cp /etc/Muttrc /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1958. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1959. echo ' if [ ! -d $SERVER_DIRECTORY/backup/mutt ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1960. echo ' mkdir -p $SERVER_DIRECTORY/backup/mutt' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1961. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1962. echo -n " rsyncrypto -v -r /home/$MY_USERNAME/tempbackup " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1963. echo -n '$SERVER_DIRECTORY/backup/mutt $SERVER_DIRECTORY/backup/mutt.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1964. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1965. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1966. echo ' rm -rf /home/$MY_USERNAME/tempbackup' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1967. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1968. echo -n ' echo "Unable to encrypt Mutt settings" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1969. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1970. echo ' exit 492' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1971. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1972. echo ' rm -rf /home/$MY_USERNAME/tempbackup' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1973. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1974. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1975. echo '# Backup procmail settings' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1976. echo "if [ -f /home/$MY_USERNAME/.procmailrc ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1977. echo ' echo "Backing up procmail settings"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1978. echo " if [ ! -d /home/$MY_USERNAME/tempbackup ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1979. echo " mkdir -p /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1980. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1981. echo " cp /home/$MY_USERNAME/.procmailrc /home/$MY_USERNAME/tempbackup" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1982. echo ' if [ ! -d $SERVER_DIRECTORY/backup/procmail ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1983. echo ' mkdir -p $SERVER_DIRECTORY/backup/procmail' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1984. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1985. echo -n " rsyncrypto -v -r /home/$MY_USERNAME/tempbackup " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1986. echo -n '$SERVER_DIRECTORY/backup/procmail $SERVER_DIRECTORY/backup/procmail.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1987. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1988. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1989. echo ' rm -rf /home/$MY_USERNAME/tempbackup' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1990. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1991. echo -n ' echo "Unable to encrypt procmail settings" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1992. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1993. echo ' exit 492' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1994. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1995. echo ' rm -rf /home/$MY_USERNAME/tempbackup' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1996. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1997. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1998. echo '# Backup email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1999. echo "if [ -d /home/$MY_USERNAME/Maildir ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2000. echo ' echo "Backing up emails"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2001. echo ' if [ ! -d $SERVER_DIRECTORY/backup/mail ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2002. echo ' mkdir -p $SERVER_DIRECTORY/backup/mail' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2003. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2004. echo -n " rsyncrypto -v -r /home/$MY_USERNAME/Maildir " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2005. echo -n '$SERVER_DIRECTORY/backup/mail $SERVER_DIRECTORY/backup/mail.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2006. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2007. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2008. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2009. echo -n ' echo "Unable to encrypt emails" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2010. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2011. echo ' exit 396' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2012. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2013. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2014. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2015. echo '# Backup DLNA cache' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2016. echo "if [ -d /var/cache/minidlna ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2017. echo ' echo "Backing up DLNA cache"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2018. echo ' if [ ! -d $SERVER_DIRECTORY/backup/dlna ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2019. echo ' mkdir -p $SERVER_DIRECTORY/backup/dlna' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2020. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2021. echo -n ' rsyncrypto -v -r /var/cache/minidlna $SERVER_DIRECTORY/backup/dlna $SERVER_DIRECTORY/backup/dlna.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2022. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2023. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2024. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2025. echo -n ' echo "Unable to encrypt DLNA settings" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2026. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2027. echo ' exit 498' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2028. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2029. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2030. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2031. if [[ $BACKUP_INCLUDES_DATABASES == "yes" ]]; then
  2032. echo '# Mysql settings' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2033. echo 'if [ ! -d $SERVER_DIRECTORY/backup/mariadb ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2034. echo ' mkdir -p $SERVER_DIRECTORY/backup/mariadb' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2035. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2036. echo 'if [ ! -d /root/tempmariadb ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2037. echo ' mkdir /root/tempmariadb' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2038. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2039. echo 'mysqldump --password=$DATABASE_PASSWORD mysql user > /root/tempmariadb/mysql.sql' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2040. echo "if [ ! -s /root/tempmariadb/mysql.sql ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2041. echo ' echo "Unable to backup mysql settings"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2042. echo ' rm -rf /root/tempmariadb' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2043. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2044. echo -n ' echo "Unable to export database settings" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2045. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2046. echo ' exit 653' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2047. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2048. echo 'echo "$DATABASE_PASSWORD" > /root/tempmariadb/db' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2049. echo 'chmod 400 /root/tempmariadb/db' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2050. echo -n 'rsyncrypto -v -r /root/tempmariadb $SERVER_DIRECTORY/backup/mariadb $SERVER_DIRECTORY/backup/mariadb.keys ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2051. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2052. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2053. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2054. echo -n ' echo "Unable to encrypt database settings" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2055. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2056. echo ' exit 794' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2057. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2058. echo 'rm -rf /root/tempmariadb' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2059. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2060. fi
  2061. # Now that we have the server directory updated with the encrypted backup
  2062. # we just need to rsync it to each friend
  2063. echo '# For each remote server' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2064. echo 'while read remote_server' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2065. echo 'do' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2066. echo ' # Get the server and its password' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2067. echo ' # Format is:' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2068. echo ' # username@domain:/home/username <port number> <ssh password>' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2069. echo -n ' REMOTE_SERVER=$(echo "${remote_server}" | ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2070. echo -n "awk -F ' ' '{print " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2071. echo -n '$1' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2072. echo "}')" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2073. echo ' if [ $REMOTE_SERVER ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2074. echo -n ' REMOTE_SSH_PORT=$(echo "${remote_server}" | ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2075. echo -n "awk -F ' ' '{print " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2076. echo -n '$2' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2077. echo "}')" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2078. echo -n ' REMOTE_PASSWORD=$(echo "${remote_server}" | ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2079. echo -n "awk -F ' ' '{print " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2080. echo -n '$3' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2081. echo "}')" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2082. echo ' NOW=$(date +"%Y-%m-%d %H:%M:%S")' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2083. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2084. echo -n ' echo "$NOW Starting backup to $REMOTE_SERVER" >> ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2085. echo "$REMOTE_BACKUPS_LOG" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2086. echo -n ' rsync -ratlzv --rsh="/usr/bin/sshpass -p $REMOTE_PASSWORD ssh -p $REMOTE_SSH_PORT -o StrictHostKeyChecking=no" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2087. echo '$SERVER_DIRECTORY/backup $REMOTE_SERVER' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2088. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2089. echo -n ' echo "$NOW Backup to $REMOTE_SERVER failed" >> ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2090. echo "$REMOTE_BACKUPS_LOG" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2091. echo ' # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2092. echo -n ' echo "Backup to $REMOTE_SERVER failed" | mail -s "Freedombone backup to friends" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2093. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2094. echo ' else' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2095. echo -n ' echo "$NOW Backed up to $REMOTE_SERVER" >> ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2096. echo "$REMOTE_BACKUPS_LOG" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2097. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2098. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2099. # End of the loop
  2100. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2101. echo "done < $FRIENDS_SERVERS_LIST" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2102. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2103. echo 'exit 0' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2104. chown root:root /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2105. chmod 400 /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2106. chmod +x /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  2107. # update crontab
  2108. echo '#!/bin/bash' > /etc/cron.daily/backuptofriends
  2109. echo "/usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME" >> /etc/cron.daily/backuptofriends
  2110. chmod +x /etc/cron.daily/backuptofriends
  2111. echo 'backup_to_friends_servers' >> $COMPLETION_FILE
  2112. }
  2113. function restore_from_friend {
  2114. if grep -Fxq "restore_from_friend" $COMPLETION_FILE; then
  2115. return
  2116. fi
  2117. apt-get -y --force-yes install rsyncrypto sshpass
  2118. get_mariadb_password
  2119. get_mariadb_gnusocial_admin_password
  2120. get_mariadb_redmatrix_admin_password
  2121. get_mariadb_owncloud_admin_password
  2122. if ! grep -q "restore from a friend's server" /home/$MY_USERNAME/README; then
  2123. echo '' >> /home/$MY_USERNAME/README
  2124. echo '' >> /home/$MY_USERNAME/README
  2125. echo 'Restoring from backups to friends servers' >> /home/$MY_USERNAME/README
  2126. echo '=========================================' >> /home/$MY_USERNAME/README
  2127. echo "To restore from a friend's server use the command:" >> /home/$MY_USERNAME/README
  2128. echo '' >> /home/$MY_USERNAME/README
  2129. echo " $RESTORE_FROM_FRIEND_SCRIPT_NAME [server]" >> /home/$MY_USERNAME/README
  2130. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  2131. fi
  2132. echo '#!/bin/bash' > /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2133. echo 'SERVER_NAME=$1' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2134. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2135. echo '# Temporary location for data to be backed up to other servers' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2136. echo 'SERVER_DIRECTORY=/root/remoterestore' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2137. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2138. echo 'if [ ! $SERVER_NAME ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2139. echo " echo '$RESTORE_FROM_FRIEND_SCRIPT_NAME [server]'" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2140. echo ' exit 1' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2141. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2142. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2143. echo "if [ ! -f $FRIENDS_SERVERS_LIST ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2144. echo " echo 'No friends list found at $FRIENDS_SERVERS_LIST'" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2145. echo ' exit 2' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2146. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2147. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2148. echo -n 'if ! grep -q "$SERVER_NAME" ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2149. echo "$FRIENDS_SERVERS_LIST; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2150. echo ' echo "Server not found within the friends list"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2151. echo ' exit 3' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2152. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2153. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2154. echo -n 'REMOTE_SERVER=$(grep -i "$SERVER_NAME" ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2155. echo -n "$FRIENDS_SERVERS_LIST | awk -F ' ' '{print " >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2156. echo -n '$1' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2157. echo "}')" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2158. echo -n 'REMOTE_SSH_PORT=$(grep -i "$SERVER_NAME" ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2159. echo -n "$FRIENDS_SERVERS_LIST | awk -F ' ' '{print " >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2160. echo -n '$2' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2161. echo "}')" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2162. echo -n 'REMOTE_PASSWORD=$(grep -i "$SERVER_NAME" ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2163. echo -n "$FRIENDS_SERVERS_LIST | awk -F ' ' '{print " >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2164. echo -n '$3' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2165. echo "}')" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2166. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2167. echo '# Check that a backup key exists' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2168. echo "if [ ! -f $BACKUP_CERTIFICATE ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2169. echo " echo 'No backup key was found in $BACKUP_CERTIFICATE'" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2170. echo ' exit 84' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2171. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2172. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2173. # Rsync from the remote server back to this server
  2174. echo 'NOW=$(date +"%Y-%m-%d %H:%M:%S")' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2175. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2176. echo -n 'echo "$NOW Starting restore from $REMOTE_SERVER" >> ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2177. echo "$REMOTE_BACKUPS_LOG" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2178. echo -n 'rsync -ratlzv --rsh="/usr/bin/sshpass -p $REMOTE_PASSWORD ssh -p $REMOTE_SSH_PORT -o StrictHostKeyChecking=no" ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2179. echo '$REMOTE_SERVER/backup $SERVER_DIRECTORY' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2180. echo 'if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2181. echo -n ' echo "$NOW Restore from $REMOTE_SERVER failed" >> ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2182. echo "$REMOTE_BACKUPS_LOG" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2183. echo ' # Send a warning email' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2184. echo -n ' echo "Restore from $REMOTE_SERVER failed" | mail -s "Freedombone restore from friend" ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2185. echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2186. echo ' exit 790' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2187. echo 'else' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2188. echo -n ' echo "$NOW Restored encrypted data from $REMOTE_SERVER" >> ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2189. echo "$REMOTE_BACKUPS_LOG" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2190. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2191. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2192. echo '# MariaDB password' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2193. echo -n 'DATABASE_PASSWORD=$(cat ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2194. echo "$DATABASE_PASSWORD_FILE)" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2195. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2196. echo 'if [ -d $SERVER_DIRECTORY/backup/mariadb ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2197. echo ' echo "Restoring mysql settings"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2198. echo ' if [ ! -d /root/tempmariadb ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2199. echo ' mkdir /root/tempmariadb' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2200. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2201. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/mariadb /root/tempmariadb $SERVER_DIRECTORY/backup/mariadb.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2202. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2203. echo ' echo "Get the MariaDB password from the backup"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2204. echo ' if [ ! -f /root/tempmariadb/remoterestore/backup/mariadb/tempmariadb/db ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2205. echo ' echo "MariaDB password file not found"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2206. echo ' exit 495' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2207. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2208. echo ' BACKUP_MARIADB_PASSWORD=$(cat /root/tempmariadb/remoterestore/backup/mariadb/tempmariadb/db)' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2209. echo ' if [[ $BACKUP_MARIADB_PASSWORD != $DATABASE_PASSWORD ]]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2210. echo ' echo "Restore the MariaDB user table"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2211. echo ' mysqlsuccess=$(mysql -u root --password=$DATABASE_PASSWORD mysql -o < /root/tempmariadb/remoterestore/backup/mariadb/tempmariadb/mysql.sql)' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2212. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2213. echo ' echo "Try again using the password obtained from backup"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2214. echo ' mysqlsuccess=$(mysql -u root --password=$BACKUP_MARIADB_PASSWORD mysql -o < /root/tempmariadb/remoterestore/backup/mariadb/tempmariadb/mysql.sql)' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2215. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2216. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2217. echo ' echo "$mysqlsuccess"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2218. echo ' exit 962' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2219. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2220. echo ' echo "Restarting database"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2221. echo ' service mysql restart' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2222. echo ' echo "Change the MariaDB password to the backup version"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2223. echo ' DATABASE_PASSWORD=$BACKUP_MARIADB_PASSWORD' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2224. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2225. echo ' shred -zu /root/tempmariadb/remoterestore/backup/mariadb/tempmariadb/db' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2226. echo ' rm -rf /root/tempmariadb' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2227. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2228. echo ' # Change database password file' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2229. echo -n ' echo "$DATABASE_PASSWORD" > ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2230. echo "$DATABASE_PASSWORD_FILE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2231. echo " chmod 600 $DATABASE_PASSWORD_FILE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2232. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2233. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2234. echo 'if [ -d $SERVER_DIRECTORY/backup/mutt ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2235. echo ' echo "Restoring Mutt settings"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2236. echo ' mkdir /root/tempmutt' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2237. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/mutt /root/tempmutt $SERVER_DIRECTORY/backup/mutt.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2238. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2239. echo " if [ -f /root/tempmutt/remoterestore/backup/mutt/$MY_USERNAME/tempbackup/.muttrc ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2240. echo " cp -f /root/tempmutt/remoterestore/backup/mutt/$MY_USERNAME/tempbackup/.muttrc /home/$MY_USERNAME/.muttrc" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2241. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2242. echo " if [ -f /root/tempmutt/remoterestore/backup/mutt/$MY_USERNAME/tempbackup/Muttrc ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2243. echo " cp -f /root/tempmutt/remoterestore/backup/mutt/$MY_USERNAME/tempbackup/Muttrc /etc/Muttrc" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2244. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2245. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2246. echo ' rm -rf /root/tempmutt' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2247. echo ' exit 276' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2248. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2249. echo ' rm -rf /root/tempmutt' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2250. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2251. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2252. echo 'if [ -d $SERVER_DIRECTORY/backup/gnupg ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2253. echo ' echo "Restoring gnupg settings"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2254. echo ' mkdir /root/tempgnupg' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2255. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/gnupg /root/tempgnupg $SERVER_DIRECTORY/backup/gnupg.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2256. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2257. echo " cp -r /root/tempgnupg/remoterestore/backup/gnupg/$MY_USERNAME/.gnupg /home/$MY_USERNAME/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2258. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2259. echo ' rm -rf /root/tempgnupg' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2260. echo ' exit 276' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2261. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2262. echo ' rm -rf /root/tempgnupg' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2263. echo " cp -r /home/$MY_USERNAME/.gnupg /root" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2264. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2265. echo ' exit 283' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2266. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2267. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2268. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2269. echo 'if [ -d $SERVER_DIRECTORY/backup/procmail ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2270. echo ' echo "Restoring procmail settings"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2271. echo ' mkdir /root/tempprocmail' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2272. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/procmail /root/tempprocmail $SERVER_DIRECTORY/backup/procmail.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2273. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2274. echo " cp -f /root/tempprocmail/remoterestore/backup/procmail/$MY_USERNAME/tempbackup/.procmailrc /home/$MY_USERNAME/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2275. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2276. echo ' rm -rf /root/tempprocmail' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2277. echo ' exit 276' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2278. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2279. echo ' rm -rf /root/tempprocmail' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2280. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2281. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2282. echo 'if [ -d $SERVER_DIRECTORY/backup/readme ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2283. echo ' echo "Restoring README"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2284. echo ' mkdir /root/tempreadme' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2285. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/readme /root/tempreadme $SERVER_DIRECTORY/backup/readme.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2286. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2287. echo " cp -f /root/tempreadme/remoterestore/backup/readme/$MY_USERNAME/tempbackup/README /home/$MY_USERNAME/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2288. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2289. echo ' rm -rf /root/tempreadme' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2290. echo ' exit 276' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2291. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2292. echo ' rm -rf /root/tempreadme' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2293. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2294. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2295. echo 'if [ -d $SERVER_DIRECTORY/backup/ssh ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2296. echo ' echo "Restoring ssh keys"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2297. echo ' mkdir /root/tempssh' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2298. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/ssh /root/tempssh $SERVER_DIRECTORY/backup/ssh.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2299. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2300. echo " cp -r /root/tempssh/remoterestore/backup/ssh/$MY_USERNAME/.ssh /home/$MY_USERNAME/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2301. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2302. echo ' rm -rf /root/tempssh' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2303. echo ' exit 664' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2304. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2305. echo ' rm -rf /root/tempssh' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2306. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2307. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2308. echo 'if [ -d $SERVER_DIRECTORY/backup/ssl ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2309. echo ' echo "Restoring certificates"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2310. echo ' mkdir /root/tempssl' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2311. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/ssl /root/tempssl $SERVER_DIRECTORY/backup/ssl.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2312. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2313. echo ' cp -r /root/tempssl/remoterestore/backup/ssl/ssl/* /etc/ssl' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2314. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2315. echo ' exit 276' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2316. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2317. echo ' rm -rf /root/tempssl' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2318. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2319. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2320. echo 'if [ -d $SERVER_DIRECTORY/backup/projects ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2321. echo ' echo "Restoring projects"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2322. echo ' mkdir /root/tempprojects' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2323. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/projects /root/tempprojects $SERVER_DIRECTORY/backup/projects.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2324. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2325. echo " if [ -d /home/$MY_USERNAME/projects ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2326. echo " rm -rf /home/$MY_USERNAME/projects" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2327. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2328. echo " mv /root/tempprojects/remoterestore/backup/projects/$MY_USERNAME/projects /home/$MY_USERNAME" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2329. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2330. echo ' exit 166' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2331. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2332. echo ' rm -rf /root/tempprojects' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2333. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2334. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2335. echo 'if [ -d $SERVER_DIRECTORY/backup/personal ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2336. echo ' echo "Restoring personal settings"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2337. echo ' mkdir /root/temppersonal' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2338. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/personal /root/temppersonal $SERVER_DIRECTORY/backup/personal.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2339. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2340. echo " if [ -d /home/$MY_USERNAME/personal ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2341. echo " rm -rf /home/$MY_USERNAME/personal" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2342. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2343. echo " mv /root/temppersonal/remoterestore/backup/personal/$MY_USERNAME/personal /home/$MY_USERNAME" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2344. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2345. echo ' exit 184' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2346. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2347. echo ' rm -rf /root/temppersonal' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2348. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2349. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2350. echo "if [ -d $PUBLIC_MAILING_LIST_DIRECTORY ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2351. echo ' echo "Restoring public mailing list"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2352. echo ' mkdir /root/tempmailinglist' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2353. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/mailinglist /root/tempmailinglist $SERVER_DIRECTORY/backup/mailinglist.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2354. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2355. echo " cp -r /root/tempmailinglist/remoterestore/backup/mailinglist/spool/mlmmj/* $PUBLIC_MAILING_LIST_DIRECTORY" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2356. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2357. echo ' exit 526' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2358. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2359. echo ' rm -rf /root/tempmailinglist' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2360. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2361. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2362. echo "if [ -d $XMPP_DIRECTORY ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2363. echo ' echo "Restoring XMPP settings"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2364. echo ' mkdir /root/tempxmpp' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2365. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/xmpp /root/tempxmpp $SERVER_DIRECTORY/backup/xmpp.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2366. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2367. echo " cp -r /root/tempxmpp/remoterestore/backup/xmpp/lib/prosody/* $XMPP_DIRECTORY" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2368. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2369. echo ' exit 725' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2370. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2371. echo ' rm -rf /root/tempxmpp' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2372. echo ' service prosody restart' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2373. echo ' chown -R prosody:prosody /var/lib/prosody/*' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2374. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2375. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2376. BACKUP_INCLUDES_WEBSITES="no"
  2377. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  2378. BACKUP_INCLUDES_WEBSITES="yes"
  2379. echo 'if [ -d $SERVER_DIRECTORY/backup/gnusocial ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2380. echo ' echo "Restoring microblog database"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2381. echo ' if [ ! -d /root/tempgnusocialdata ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2382. echo ' mkdir /root/tempgnusocialdata' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2383. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2384. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/gnusocialdata /root/tempgnusocialdata $SERVER_DIRECTORY/backup/gnusocialdata.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2385. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2386. echo ' if [ ! -f /root/tempgnusocialdata/remoterestore/backup/gnusocialdata/tempgnusocialdata/gnusocial.sql ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2387. echo ' echo "Unable to restore microblog database"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2388. echo ' rm -rf /root/tempgnusocialdata' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2389. echo ' exit 503' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2390. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2391. echo ' mysqlsuccess=$(mysql -u root --password=$DATABASE_PASSWORD gnusocial -o < /root/tempgnusocialdata/remoterestore/backup/gnusocialdata/tempgnusocialdata/gnusocial.sql)' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2392. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2393. echo ' echo "$mysqlsuccess"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2394. echo ' exit 964' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2395. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2396. echo ' shred -zu /root/tempgnusocialdata/remoterestore/backup/gnusocialdata/tempgnusocialdata/*' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2397. echo ' rm -rf /root/tempgnusocialdata' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2398. echo ' echo "Restoring microblog installation"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2399. echo ' if [ ! -d /root/tempgnusocial ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2400. echo ' mkdir /root/tempgnusocial' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2401. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2402. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/gnusocial /root/tempgnusocial $SERVER_DIRECTORY/backup/gnusocial.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2403. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2404. echo " rm -rf /var/www/$MICROBLOG_DOMAIN_NAME/htdocs" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2405. echo " mv /root/tempgnusocial/remoterestore/backup/gnusocial/www/$MICROBLOG_DOMAIN_NAME/htdocs /var/www/$MICROBLOG_DOMAIN_NAME/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2406. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2407. echo ' exit 683' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2408. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2409. echo ' rm -rf /root/tempgnusocial' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2410. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2411. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2412. fi
  2413. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  2414. BACKUP_INCLUDES_WEBSITES="yes"
  2415. echo 'if [ -d $SERVER_DIRECTORY/backup/redmatrix ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2416. echo ' echo "Restoring Red Matrix database"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2417. echo ' if [ ! -d /root/tempredmatrixdata ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2418. echo ' mkdir /root/tempredmatrixdata' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2419. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2420. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/redmatrixdata /root/tempredmatrixdata $SERVER_DIRECTORY/backup/redmatrixdata.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2421. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2422. echo ' if [ ! -f /root/tempredmatrixdata/remoterestore/backup/redmatrixdata/tempredmatrixdata/redmatrix.sql ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2423. echo ' echo "Unable to restore Red Matrix database"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2424. echo ' rm -rf /root/tempredmatrixdata' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2425. echo ' exit 504' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2426. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2427. echo ' mysqlsuccess=$(mysql -u root --password=$DATABASE_PASSWORD redmatrix -o < /root/tempredmatrixdata/remoterestore/backup/redmatrixdata/tempredmatrixdata/redmatrix.sql)' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2428. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2429. echo ' echo "$mysqlsuccess"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2430. echo ' exit 965' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2431. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2432. echo ' shred -zu /root/tempredmatrixdata/remoterestore/backup/redmatrixdata/tempredmatrixdata/*' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2433. echo ' rm -rf /root/tempredmatrixdata' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2434. echo ' echo "Restoring Red Matrix installation"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2435. echo ' if [ ! -d /root/tempredmatrix ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2436. echo ' mkdir /root/tempredmatrix' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2437. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2438. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/redmatrix /root/tempredmatrix $SERVER_DIRECTORY/backup/redmatrix.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2439. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2440. echo " rm -rf /var/www/$REDMATRIX_DOMAIN_NAME/htdocs" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2441. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2442. echo " cp -r /root/tempredmatrix/remoterestore/backup/redmatrix/www/$REDMATRIX_DOMAIN_NAME/htdocs/* /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2443. echo ' else' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2444. echo " mv /root/tempredmatrix/remoterestore/backup/redmatrix/www/$REDMATRIX_DOMAIN_NAME/htdocs /var/www/$REDMATRIX_DOMAIN_NAME/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2445. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2446. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2447. echo ' exit 759' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2448. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2449. echo ' rm -rf /root/tempredmatrix' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2450. echo " chmod 777 /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]/smarty3" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2451. echo " chown -R www-data:www-data /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/*" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2452. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2453. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2454. fi
  2455. if grep -Fxq "install_owncloud" $COMPLETION_FILE; then
  2456. BACKUP_INCLUDES_WEBSITES="yes"
  2457. echo 'if [ -d $SERVER_DIRECTORY/backup/owncloud ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2458. echo ' echo "Restoring owncloud database"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2459. echo ' if [ ! -d /root/tempownclouddata ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2460. echo ' mkdir /root/tempownclouddata' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2461. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2462. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/ownclouddata /root/tempownclouddata $SERVER_DIRECTORY/backup/ownclouddata.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2463. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2464. echo ' if [ ! -f /root/tempownclouddata/remoterestore/backup/ownclouddata/tempownclouddata/owncloud.sql ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2465. echo ' echo "Unable to restore Owncloud database"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2466. echo ' rm -rf /root/tempownclouddata' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2467. echo ' exit 505' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2468. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2469. echo ' mysqlsuccess=$(mysql -u root --password=$DATABASE_PASSWORD owncloud -o < /root/tempownclouddata/remoterestore/backup/ownclouddata/tempownclouddata/owncloud.sql)' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2470. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2471. echo ' echo "$mysqlsuccess"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2472. echo ' exit 965' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2473. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2474. echo ' echo "Restoring Owncloud installation"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2475. echo ' if [ ! -d /root/tempowncloud ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2476. echo ' mkdir /root/tempowncloud' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2477. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2478. echo ' if [ ! -d /root/tempowncloud2 ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2479. echo ' mkdir /root/tempowncloud2' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2480. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2481. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/owncloud /root/tempowncloud $SERVER_DIRECTORY/backup/owncloud.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2482. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2483. echo " cp -r /root/tempowncloud/remoterestore/backup/owncloud/lib/owncloud/* /var/lib/owncloud/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2484. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2485. echo ' exit 981' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2486. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2487. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/owncloud2 /root/tempowncloud2 $SERVER_DIRECTORY/backup/owncloud2.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2488. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2489. echo " cp -r /root/tempowncloud2/remoterestore/backup/owncloud2/owncloud/* /etc/owncloud/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2490. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2491. echo ' exit 982' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2492. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2493. echo ' rm -rf /root/tempowncloud' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2494. echo ' rm -rf /root/tempowncloud2' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2495. echo ' rm -rf /root/tempownclouddata' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2496. echo ' chown -R www-data:www-data /var/lib/owncloud/data' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2497. echo ' chown -R www-data:www-data /var/lib/owncloud/backup' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2498. echo ' chown -R www-data:www-data /var/lib/owncloud/assets' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2499. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2500. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2501. fi
  2502. echo 'if [ -d $SERVER_DIRECTORY/backup/wiki ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2503. echo ' echo "Restoring Wiki installation"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2504. echo ' mkdir /root/tempwiki' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2505. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/wiki /root/tempwiki $SERVER_DIRECTORY/backup/wiki.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2506. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2507. echo " cp -r /root/tempwiki/remoterestore/backup/wiki/lib/dokuwiki/* /var/lib/dokuwiki/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2508. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2509. echo ' exit 868' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2510. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2511. echo ' mkdir /root/tempwiki2' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2512. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/wiki2 /root/tempwiki2 $SERVER_DIRECTORY/backup/wiki2.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2513. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2514. echo " cp -r /root/tempwiki2/remoterestore/backup/wiki2/dokuwiki/* /etc/dokuwiki/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2515. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2516. echo ' exit 869' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2517. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2518. echo ' rm -rf /root/tempwiki' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2519. echo ' rm -rf /root/tempwiki2' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2520. echo ' chown -R www-data:www-data /var/lib/dokuwiki/*' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2521. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2522. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2523. echo 'if [ -d $SERVER_DIRECTORY/backup/blog ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2524. echo ' echo "Restoring blog installation"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2525. echo ' mkdir /root/tempblog' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2526. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/blog /root/tempblog $SERVER_DIRECTORY/backup/blog.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2527. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2528. echo " rm -rf /var/www/$FULLBLOG_DOMAIN_NAME/htdocs" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2529. echo " cp -r /root/tempblog/remoterestore/backup/blog/www/$FULLBLOG_DOMAIN_NAME/htdocs /var/www/$FULLBLOG_DOMAIN_NAME/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2530. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2531. echo ' exit 593' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2532. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2533. echo ' rm -rf /root/tempblog' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2534. echo " if [ ! -d /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/content ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2535. echo ' echo "No content directory found after restoring blog"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2536. echo ' exit 287' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2537. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2538. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2539. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2540. echo 'if [ -d $SERVER_DIRECTORY/backup/mail ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2541. echo ' echo "Restoring emails"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2542. echo ' mkdir /root/tempmail' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2543. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/mail /root/tempmail $SERVER_DIRECTORY/backup/mail.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2544. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2545. echo " if [ ! -d /home/$MY_USERNAME/Maildir ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2546. echo " mkdir /home/$MY_USERNAME/Maildir" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2547. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2548. echo " cp -r /root/tempmail/remoterestore/backup/mail/$MY_USERNAME/Maildir/* /home/$MY_USERNAME/Maildir/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2549. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2550. echo ' exit 927' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2551. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2552. echo ' rm -rf /root/tempmail' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2553. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2554. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2555. echo "if [ -d /var/cache/minidlna ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2556. echo ' if [ -d $SERVER_DIRECTORY/backup/dlna ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2557. echo ' echo "Restoring DLNA cache"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2558. echo ' mkdir /root/tempdlna' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2559. echo -n ' rsyncrypto -v -d -r $SERVER_DIRECTORY/backup/dlna /root/tempdlna $SERVER_DIRECTORY/backup/dlna.keys ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2560. echo "$BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2561. echo " cp -r /root/tempdlna/remoterestore/backup/dlna/cache/minidlna/* /var/cache/minidlna/" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2562. echo ' if [ ! "$?" = "0" ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2563. echo ' exit 982' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2564. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2565. echo ' rm -rf /root/tempdlna' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2566. echo ' fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2567. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2568. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2569. echo 'echo "*** Remote restore was successful ***"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2570. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2571. echo 'exit 0' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2572. chmod 400 /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2573. chmod +x /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  2574. echo 'restore_from_friend' >> $COMPLETION_FILE
  2575. }
  2576. function remove_default_user {
  2577. # make sure you don't use the default user account
  2578. if [[ $MY_USERNAME == "debian" ]]; then
  2579. echo 'Do not use the default debian user account. Create a different user with: adduser [username]'
  2580. exit 68
  2581. fi
  2582. # remove the default debian user to prevent it from becoming an attack vector
  2583. if [ -d /home/debian ]; then
  2584. userdel -r debian
  2585. echo 'Default debian user account removed'
  2586. fi
  2587. }
  2588. function enforce_good_passwords {
  2589. # because humans are generally bad at choosing passwords
  2590. if grep -Fxq "enforce_good_passwords" $COMPLETION_FILE; then
  2591. return
  2592. fi
  2593. apt-get -y --force-yes install libpam-cracklib
  2594. 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
  2595. echo 'enforce_good_passwords' >> $COMPLETION_FILE
  2596. }
  2597. function change_login_message {
  2598. if grep -Fxq "change_login_message" $COMPLETION_FILE; then
  2599. return
  2600. fi
  2601. echo '' > /etc/motd
  2602. echo ".---. . . " >> /etc/motd
  2603. echo "| | | " >> /etc/motd
  2604. echo "|--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-. " >> /etc/motd
  2605. echo "| | (.-' (.-' ( | ( )| | | | )( )| | (.-' " >> /etc/motd
  2606. echo "' ' --' --' -' - -' ' ' -' -' -' ' - --'" >> /etc/motd
  2607. if [[ $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  2608. echo ' . . . ' >> /etc/motd
  2609. echo ' |\ /| | o ' >> /etc/motd
  2610. echo " | \/ | .-. .-.| . .-. " >> /etc/motd
  2611. echo " | |(.-'( | | ( ) " >> /etc/motd
  2612. echo " ' ' --' -' --' - -' - " >> /etc/motd
  2613. fi
  2614. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" ]]; then
  2615. echo ' . . . . . ' >> /etc/motd
  2616. echo ' \ \ / / o _|_ ' >> /etc/motd
  2617. echo ' \ \ /.--.. | .-. .--.' >> /etc/motd
  2618. echo " \/ \/ | | | (.-' | " >> /etc/motd
  2619. echo " ' ' ' -' - -' --'' " >> /etc/motd
  2620. fi
  2621. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  2622. echo ' .--.. . ' >> /etc/motd
  2623. echo ' : | | ' >> /etc/motd
  2624. echo ' | | .-. . . .-.| ' >> /etc/motd
  2625. echo ' : |( )| |( | ' >> /etc/motd
  2626. echo " --' - -' -- - -' -" >> /etc/motd
  2627. fi
  2628. if [[ $SYSTEM_TYPE == "$VARIANT_CHAT" ]]; then
  2629. echo ' .--.. . ' >> /etc/motd
  2630. echo ' : | _|_ ' >> /etc/motd
  2631. echo ' | |--. .-. | ' >> /etc/motd
  2632. echo ' : | |( ) | ' >> /etc/motd
  2633. echo " --'' - -' - -' " >> /etc/motd
  2634. fi
  2635. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" ]]; then
  2636. echo ' .-. . ' >> /etc/motd
  2637. echo ' ( ) o | ' >> /etc/motd
  2638. echo ' -. .-. .-. . .-. | ' >> /etc/motd
  2639. echo ' ( )( )( | ( ) | ' >> /etc/motd
  2640. echo " -' -' -'-' - -' - - " >> /etc/motd
  2641. fi
  2642. if [[ $SYSTEM_TYPE == "$VARIANT_MAILBOX" ]]; then
  2643. echo ' . . . . ' >> /etc/motd
  2644. echo ' |\ /| o | | ' >> /etc/motd
  2645. echo ' | \/ | .-. . | |.-. .-.-. ,- ' >> /etc/motd
  2646. echo ' | |( ) | | | )( ) : ' >> /etc/motd
  2647. echo " ' ' -' --' - -' -' -'-' - " >> /etc/motd
  2648. fi
  2649. if [[ $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2650. echo ' .---. .--. . ' >> /etc/motd
  2651. echo ' | | : | ' >> /etc/motd
  2652. echo ' | .-. .--. | | .-. .--. .-..| .-. ' >> /etc/motd
  2653. echo " |( )| | ;( )| |( ||(.-' " >> /etc/motd
  2654. echo " ' -' ' '--' -' ' - - | - --'" >> /etc/motd
  2655. echo " ._.' " >> /etc/motd
  2656. fi
  2657. if [[ $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  2658. echo ' .---. . . . . .-. ' >> /etc/motd
  2659. echo ' | \ \ / / o | o ' >> /etc/motd
  2660. echo ' | .-. .--. \ \ / . -|- . ' >> /etc/motd
  2661. echo ' | ( )| \/ \/ | | | ' >> /etc/motd
  2662. echo " ' -' ' ' ' -' - ' -' -" >> /etc/motd
  2663. fi
  2664. echo '' >> /etc/motd
  2665. echo ' Freedom in the Cloud' >> /etc/motd
  2666. echo '' >> /etc/motd
  2667. echo 'change_login_message' >> $COMPLETION_FILE
  2668. }
  2669. function search_for_attached_usb_drive {
  2670. # If a USB drive is attached then search for email,
  2671. # gpg, ssh keys and emacs configuration
  2672. if grep -Fxq "search_for_attached_usb_drive" $COMPLETION_FILE; then
  2673. return
  2674. fi
  2675. if [[ $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  2676. return
  2677. fi
  2678. if [ -b $USB_DRIVE ]; then
  2679. if [ ! -d $USB_MOUNT ]; then
  2680. echo 'Mounting USB drive'
  2681. mkdir $USB_MOUNT
  2682. mount $USB_DRIVE $USB_MOUNT
  2683. fi
  2684. 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
  2685. if [ -d $USB_MOUNT/Maildir ]; then
  2686. echo 'Maildir found on USB drive'
  2687. IMPORT_MAILDIR=$USB_MOUNT/Maildir
  2688. fi
  2689. if [ -d $USB_MOUNT/.gnupg ]; then
  2690. echo 'Importing GPG keyring'
  2691. cp -r $USB_MOUNT/.gnupg /home/$MY_USERNAME
  2692. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
  2693. GPG_KEYS_IMPORTED="yes"
  2694. if [ -f /home/$MY_USERNAME/.gnupg/secring.gpg ]; then
  2695. shred -zu $USB_MOUNT/.gnupg/secring.gpg
  2696. shred -zu $USB_MOUNT/.gnupg/random_seed
  2697. shred -zu $USB_MOUNT/.gnupg/trustdb.gpg
  2698. rm -rf $USB_MOUNT/.gnupg
  2699. else
  2700. echo 'GPG files did not copy'
  2701. exit 7
  2702. fi
  2703. fi
  2704. if [ -f $USB_MOUNT/.procmailrc ]; then
  2705. echo 'Importing procmail settings'
  2706. cp $USB_MOUNT/.procmailrc /home/$MY_USERNAME
  2707. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.procmailrc
  2708. fi
  2709. if [ -f $USB_MOUNT/private_key.gpg ]; then
  2710. echo 'GPG private key found on USB drive'
  2711. MY_GPG_PRIVATE_KEY=$USB_MOUNT/private_key.gpg
  2712. fi
  2713. if [ -f $USB_MOUNT/public_key.gpg ]; then
  2714. echo 'GPG public key found on USB drive'
  2715. MY_GPG_PUBLIC_KEY=$USB_MOUNT/public_key.gpg
  2716. fi
  2717. fi
  2718. if [ -d $USB_MOUNT/prosody ]; then
  2719. if [ ! -d $XMPP_DIRECTORY ]; then
  2720. mkdir $XMPP_DIRECTORY
  2721. fi
  2722. cp -r $USB_MOUNT/prosody/* $XMPP_DIRECTORY
  2723. chown -R prosody:prosody $XMPP_DIRECTORY
  2724. fi
  2725. if [ -d $USB_MOUNT/.ssh ]; then
  2726. echo 'Importing ssh keys'
  2727. cp -r $USB_MOUNT/.ssh /home/$MY_USERNAME
  2728. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.ssh
  2729. # for security delete the ssh keys from the usb drive
  2730. if [ -f /home/$MY_USERNAME/.ssh/id_rsa ]; then
  2731. shred -zu $USB_MOUNT/.ssh/id_rsa
  2732. shred -zu $USB_MOUNT/.ssh/id_rsa.pub
  2733. shred -zu $USB_MOUNT/.ssh/known_hosts
  2734. rm -rf $USB_MOUNT/.ssh
  2735. else
  2736. echo 'ssh files did not copy'
  2737. exit 8
  2738. fi
  2739. fi
  2740. if [ -f $USB_MOUNT/.emacs ]; then
  2741. echo 'Importing .emacs file'
  2742. cp -f $USB_MOUNT/.emacs /home/$MY_USERNAME/.emacs
  2743. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.emacs
  2744. fi
  2745. if [ -d $USB_MOUNT/.emacs.d ]; then
  2746. echo 'Importing .emacs.d directory'
  2747. cp -r $USB_MOUNT/.emacs.d /home/$MY_USERNAME
  2748. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.emacs.d
  2749. fi
  2750. if [ -d $USB_MOUNT/ssl ]; then
  2751. echo 'Importing SSL certificates'
  2752. cp -r $USB_MOUNT/ssl/* /etc/ssl
  2753. chmod 640 /etc/ssl/certs/*
  2754. chmod 400 /etc/ssl/private/*
  2755. # change ownership of some certificates
  2756. if [ -d /etc/prosody ]; then
  2757. chown prosody:prosody /etc/ssl/private/xmpp.*
  2758. chown prosody:prosody /etc/ssl/certs/xmpp.*
  2759. fi
  2760. if [ -d /etc/dovecot ]; then
  2761. chown root:dovecot /etc/ssl/certs/dovecot.*
  2762. chown root:dovecot /etc/ssl/private/dovecot.*
  2763. fi
  2764. if [ -f /etc/ssl/private/exim.key ]; then
  2765. chown root:Debian-exim /etc/ssl/private/exim.key /etc/ssl/certs/exim.crt /etc/ssl/certs/exim.dhparam
  2766. fi
  2767. fi
  2768. if [ -d $USB_MOUNT/personal ]; then
  2769. echo 'Importing personal directory'
  2770. cp -r $USB_MOUNT/personal /home/$MY_USERNAME
  2771. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/personal
  2772. fi
  2773. else
  2774. if [ -d $USB_MOUNT ]; then
  2775. umount $USB_MOUNT
  2776. rm -rf $USB_MOUNT
  2777. fi
  2778. echo 'No USB drive attached'
  2779. fi
  2780. echo 'search_for_attached_usb_drive' >> $COMPLETION_FILE
  2781. }
  2782. function remove_proprietary_repos {
  2783. if grep -Fxq "remove_proprietary_repos" $COMPLETION_FILE; then
  2784. return
  2785. fi
  2786. sed -i 's/ non-free//g' /etc/apt/sources.list
  2787. echo 'remove_proprietary_repos' >> $COMPLETION_FILE
  2788. }
  2789. function change_debian_repos {
  2790. if grep -Fxq "change_debian_repos" $COMPLETION_FILE; then
  2791. return
  2792. fi
  2793. rm -rf /var/lib/apt/lists/*
  2794. apt-get clean
  2795. sed -i "s/ftp.us.debian.org/$DEBIAN_REPO/g" /etc/apt/sources.list
  2796. # ensure that there is a security repo
  2797. if ! grep -q "security" /etc/apt/sources.list; then
  2798. echo "deb http://security.debian.org/ $DEBIAN_VERSION/updates main contrib" >> /etc/apt/sources.list
  2799. echo "#deb-src http://security.debian.org/ $DEBIAN_VERSION/updates main contrib" >> /etc/apt/sources.list
  2800. fi
  2801. apt-get update
  2802. apt-get -y --force-yes install apt-transport-https
  2803. echo 'change_debian_repos' >> $COMPLETION_FILE
  2804. }
  2805. function initial_setup {
  2806. if grep -Fxq "initial_setup" $COMPLETION_FILE; then
  2807. return
  2808. fi
  2809. apt-get -y remove --purge apache*
  2810. apt-get -y dist-upgrade
  2811. apt-get -y install ca-certificates emacs24 cpulimit
  2812. echo 'initial_setup' >> $COMPLETION_FILE
  2813. }
  2814. function install_editor {
  2815. if grep -Fxq "install_editor" $COMPLETION_FILE; then
  2816. return
  2817. fi
  2818. update-alternatives --set editor /usr/bin/emacs24
  2819. # A minimal emacs configuration
  2820. #echo -n "(add-to-list 'load-path " > /home/$MY_USERNAME/.emacs
  2821. #echo '"~/.emacs.d/")' >> /home/$MY_USERNAME/.emacs
  2822. #echo '' >> /home/$MY_USERNAME/.emacs
  2823. echo ';; ===== Remove trailing whitepace ======================================' >> /home/$MY_USERNAME/.emacs
  2824. echo '' >> /home/$MY_USERNAME/.emacs
  2825. echo ";;(add-hook 'before-save-hook 'delete-trailing-whitespace)" >> /home/$MY_USERNAME/.emacs
  2826. echo '' >> /home/$MY_USERNAME/.emacs
  2827. echo ';; Goto a line number with CTRL-l' >> /home/$MY_USERNAME/.emacs
  2828. echo -n '(global-set-key "\C-l" ' >> /home/$MY_USERNAME/.emacs
  2829. echo "'goto-line)" >> /home/$MY_USERNAME/.emacs
  2830. echo '' >> /home/$MY_USERNAME/.emacs
  2831. echo ';; ===== Show line numbers ==============================================' >> /home/$MY_USERNAME/.emacs
  2832. echo '' >> /home/$MY_USERNAME/.emacs
  2833. echo "(add-hook 'find-file-hook (lambda () (linum-mode 1)))" >> /home/$MY_USERNAME/.emacs
  2834. echo '' >> /home/$MY_USERNAME/.emacs
  2835. echo ';; ===== Enable line wrapping in org-mode ===============================' >> /home/$MY_USERNAME/.emacs
  2836. echo '' >> /home/$MY_USERNAME/.emacs
  2837. echo " (add-hook 'org-mode-hook" >> /home/$MY_USERNAME/.emacs
  2838. echo " '(lambda ()" >> /home/$MY_USERNAME/.emacs
  2839. echo " (visual-line-mode 1)))" >> /home/$MY_USERNAME/.emacs
  2840. echo '' >> /home/$MY_USERNAME/.emacs
  2841. echo ';; ===== Enable shift select in org mode ================================' >> /home/$MY_USERNAME/.emacs
  2842. echo '' >> /home/$MY_USERNAME/.emacs
  2843. echo '(setq org-support-shift-select t)' >> /home/$MY_USERNAME/.emacs
  2844. echo '' >> /home/$MY_USERNAME/.emacs
  2845. echo ';; ===== Set standard indent to 4 rather that 4 =========================' >> /home/$MY_USERNAME/.emacs
  2846. echo '' >> /home/$MY_USERNAME/.emacs
  2847. echo '(setq standard-indent 4)' >> /home/$MY_USERNAME/.emacs
  2848. echo '(setq-default tab-width 4)' >> /home/$MY_USERNAME/.emacs
  2849. echo '(setq c-basic-offset 4)' >> /home/$MY_USERNAME/.emacs
  2850. echo '' >> /home/$MY_USERNAME/.emacs
  2851. echo ';; ===== Support Wheel Mouse Scrolling ==================================' >> /home/$MY_USERNAME/.emacs
  2852. echo '' >> /home/$MY_USERNAME/.emacs
  2853. echo '(mouse-wheel-mode t)' >> /home/$MY_USERNAME/.emacs
  2854. echo '' >> /home/$MY_USERNAME/.emacs
  2855. echo ';; ===== Place Backup Files in Specific Directory =======================' >> /home/$MY_USERNAME/.emacs
  2856. echo '' >> /home/$MY_USERNAME/.emacs
  2857. echo '(setq make-backup-files t)' >> /home/$MY_USERNAME/.emacs
  2858. echo '(setq version-control t)' >> /home/$MY_USERNAME/.emacs
  2859. echo '(setq backup-directory-alist (quote ((".*" . "~/.emacs_backups/"))))' >> /home/$MY_USERNAME/.emacs
  2860. echo '' >> /home/$MY_USERNAME/.emacs
  2861. echo ';; ===== Make Text mode the default mode for new buffers ================' >> /home/$MY_USERNAME/.emacs
  2862. echo '' >> /home/$MY_USERNAME/.emacs
  2863. echo "(setq default-major-mode 'text-mode)" >> /home/$MY_USERNAME/.emacs
  2864. echo '' >> /home/$MY_USERNAME/.emacs
  2865. echo ';; ===== Line length ====================================================' >> /home/$MY_USERNAME/.emacs
  2866. echo '' >> /home/$MY_USERNAME/.emacs
  2867. echo '(setq-default fill-column 72)' >> /home/$MY_USERNAME/.emacs
  2868. echo '' >> /home/$MY_USERNAME/.emacs
  2869. echo ';; ===== Enable Line and Column Numbering ===============================' >> /home/$MY_USERNAME/.emacs
  2870. echo '' >> /home/$MY_USERNAME/.emacs
  2871. echo '(line-number-mode 1)' >> /home/$MY_USERNAME/.emacs
  2872. echo '(column-number-mode 1)' >> /home/$MY_USERNAME/.emacs
  2873. echo '' >> /home/$MY_USERNAME/.emacs
  2874. echo ';; ===== Turn on Auto Fill mode automatically in all modes ==============' >> /home/$MY_USERNAME/.emacs
  2875. echo '' >> /home/$MY_USERNAME/.emacs
  2876. echo ';; Auto-fill-mode the the automatic wrapping of lines and insertion of' >> /home/$MY_USERNAME/.emacs
  2877. echo ';; newlines when the cursor goes over the column limit.' >> /home/$MY_USERNAME/.emacs
  2878. echo '' >> /home/$MY_USERNAME/.emacs
  2879. echo ';; This should actually turn on auto-fill-mode by default in all major' >> /home/$MY_USERNAME/.emacs
  2880. echo ';; modes. The other way to do this is to turn on the fill for specific modes' >> /home/$MY_USERNAME/.emacs
  2881. echo ';; via hooks.' >> /home/$MY_USERNAME/.emacs
  2882. echo '' >> /home/$MY_USERNAME/.emacs
  2883. echo '(setq auto-fill-mode 1)' >> /home/$MY_USERNAME/.emacs
  2884. echo '' >> /home/$MY_USERNAME/.emacs
  2885. echo ';; ===== Enable GPG encryption =========================================' >> /home/$MY_USERNAME/.emacs
  2886. echo '' >> /home/$MY_USERNAME/.emacs
  2887. echo "(require 'epa)" >> /home/$MY_USERNAME/.emacs
  2888. echo '(epa-file-enable)' >> /home/$MY_USERNAME/.emacs
  2889. cp /home/$MY_USERNAME/.emacs /root/.emacs
  2890. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.emacs
  2891. echo 'install_editor' >> $COMPLETION_FILE
  2892. }
  2893. function enable_backports {
  2894. if grep -Fxq "enable_backports" $COMPLETION_FILE; then
  2895. return
  2896. fi
  2897. if ! grep -Fxq "deb http://$DEBIAN_REPO/debian $DEBIAN_VERSION-backports main" /etc/apt/sources.list; then
  2898. echo "deb http://$DEBIAN_REPO/debian $DEBIAN_VERSION-backports main" >> /etc/apt/sources.list
  2899. fi
  2900. echo 'enable_backports' >> $COMPLETION_FILE
  2901. }
  2902. function update_the_kernel {
  2903. if grep -Fxq "update_the_kernel" $COMPLETION_FILE; then
  2904. return
  2905. fi
  2906. # if this is not a beaglebone or is a docker container
  2907. # then just use the standard kernel
  2908. if [[ $INSTALLED_WITHIN_DOCKER == "yes" || $INSTALLING_ON_BBB != "yes" ]]; then
  2909. return
  2910. fi
  2911. cd /opt/scripts/tools
  2912. ./update_kernel.sh --kernel $KERNEL_VERSION
  2913. echo 'update_the_kernel' >> $COMPLETION_FILE
  2914. }
  2915. function enable_zram {
  2916. if grep -Fxq "enable_zram" $COMPLETION_FILE; then
  2917. return
  2918. fi
  2919. if [[ $INSTALLED_WITHIN_DOCKER == "yes" || $INSTALLING_ON_BBB != "yes" ]]; then
  2920. return
  2921. fi
  2922. if ! grep -q "options zram num_devices=1" /etc/modprobe.d/zram.conf; then
  2923. echo 'options zram num_devices=1' >> /etc/modprobe.d/zram.conf
  2924. fi
  2925. echo '#!/bin/bash' > /etc/init.d/zram
  2926. echo '### BEGIN INIT INFO' >> /etc/init.d/zram
  2927. echo '# Provides: zram' >> /etc/init.d/zram
  2928. echo '# Required-Start:' >> /etc/init.d/zram
  2929. echo '# Required-Stop:' >> /etc/init.d/zram
  2930. echo '# Default-Start: 2 3 4 5' >> /etc/init.d/zram
  2931. echo '# Default-Stop: 0 1 6' >> /etc/init.d/zram
  2932. echo '# Short-Description: Increased Performance In Linux With zRam (Virtual Swap Compressed in RAM)' >> /etc/init.d/zram
  2933. echo '# Description: Adapted from systemd scripts at https://github.com/mystilleef/FedoraZram' >> /etc/init.d/zram
  2934. echo '### END INIT INFO' >> /etc/init.d/zram
  2935. echo 'start() {' >> /etc/init.d/zram
  2936. echo ' # get the number of CPUs' >> /etc/init.d/zram
  2937. echo ' num_cpus=$(grep -c processor /proc/cpuinfo)' >> /etc/init.d/zram
  2938. echo ' # if something goes wrong, assume we have 1' >> /etc/init.d/zram
  2939. echo ' [ "$num_cpus" != 0 ] || num_cpus=1' >> /etc/init.d/zram
  2940. echo ' # set decremented number of CPUs' >> /etc/init.d/zram
  2941. echo ' decr_num_cpus=$((num_cpus - 1))' >> /etc/init.d/zram
  2942. echo ' # get the amount of memory in the machine' >> /etc/init.d/zram
  2943. echo ' mem_total_kb=$(grep MemTotal /proc/meminfo | grep -E --only-matching "[[:digit:]]+")' >> /etc/init.d/zram
  2944. echo ' mem_total=$((mem_total_kb * 1024))' >> /etc/init.d/zram
  2945. echo ' # load dependency modules' >> /etc/init.d/zram
  2946. echo ' modprobe zram num_devices=$num_cpus' >> /etc/init.d/zram
  2947. echo ' # initialize the devices' >> /etc/init.d/zram
  2948. echo ' for i in $(seq 0 $decr_num_cpus); do' >> /etc/init.d/zram
  2949. echo ' echo $((mem_total / num_cpus)) > /sys/block/zram$i/disksize' >> /etc/init.d/zram
  2950. echo ' done' >> /etc/init.d/zram
  2951. echo ' # Creating swap filesystems' >> /etc/init.d/zram
  2952. echo ' for i in $(seq 0 $decr_num_cpus); do' >> /etc/init.d/zram
  2953. echo ' mkswap /dev/zram$i' >> /etc/init.d/zram
  2954. echo ' done' >> /etc/init.d/zram
  2955. echo ' # Switch the swaps on' >> /etc/init.d/zram
  2956. echo ' for i in $(seq 0 $decr_num_cpus); do' >> /etc/init.d/zram
  2957. echo ' swapon -p 100 /dev/zram$i' >> /etc/init.d/zram
  2958. echo ' done' >> /etc/init.d/zram
  2959. echo '}' >> /etc/init.d/zram
  2960. echo 'stop() {' >> /etc/init.d/zram
  2961. echo ' # get the number of CPUs' >> /etc/init.d/zram
  2962. echo ' num_cpus=$(grep -c processor /proc/cpuinfo)' >> /etc/init.d/zram
  2963. echo ' # set decremented number of CPUs' >> /etc/init.d/zram
  2964. echo ' decr_num_cpus=$((num_cpus - 1))' >> /etc/init.d/zram
  2965. echo ' # Switching off swap' >> /etc/init.d/zram
  2966. echo ' for i in $(seq 0 $decr_num_cpus); do' >> /etc/init.d/zram
  2967. echo ' if [ "$(grep /dev/zram$i /proc/swaps)" != "" ]; then' >> /etc/init.d/zram
  2968. echo ' swapoff /dev/zram$i' >> /etc/init.d/zram
  2969. echo ' sleep 1' >> /etc/init.d/zram
  2970. echo ' fi' >> /etc/init.d/zram
  2971. echo ' done' >> /etc/init.d/zram
  2972. echo ' sleep 1' >> /etc/init.d/zram
  2973. echo ' rmmod zram' >> /etc/init.d/zram
  2974. echo '}' >> /etc/init.d/zram
  2975. echo 'case "$1" in' >> /etc/init.d/zram
  2976. echo ' start)' >> /etc/init.d/zram
  2977. echo ' start' >> /etc/init.d/zram
  2978. echo ' ;;' >> /etc/init.d/zram
  2979. echo ' stop)' >> /etc/init.d/zram
  2980. echo ' stop' >> /etc/init.d/zram
  2981. echo ' ;;' >> /etc/init.d/zram
  2982. echo ' restart)' >> /etc/init.d/zram
  2983. echo ' stop' >> /etc/init.d/zram
  2984. echo ' sleep 3' >> /etc/init.d/zram
  2985. echo ' start' >> /etc/init.d/zram
  2986. echo ' ;;' >> /etc/init.d/zram
  2987. echo ' *)' >> /etc/init.d/zram
  2988. echo ' echo "Usage: $0 {start|stop|restart}"' >> /etc/init.d/zram
  2989. echo ' RETVAL=1' >> /etc/init.d/zram
  2990. echo 'esac' >> /etc/init.d/zram
  2991. echo 'exit $RETVAL' >> /etc/init.d/zram
  2992. chmod +x /etc/init.d/zram
  2993. update-rc.d zram defaults
  2994. echo 'enable_zram' >> $COMPLETION_FILE
  2995. }
  2996. function random_number_generator {
  2997. if grep -Fxq "random_number_generator" $COMPLETION_FILE; then
  2998. return
  2999. fi
  3000. if [[ $INSTALLING_ON_BBB != "yes" ]]; then
  3001. # On systems which are not beaglebones assume that
  3002. # no hardware random number generator is available
  3003. # and use the second best option
  3004. apt-get -y --force-yes install haveged
  3005. echo 'random_number_generator' >> $COMPLETION_FILE
  3006. return
  3007. fi
  3008. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  3009. # it is assumed that docker uses the random number
  3010. # generator of the host system
  3011. echo 'random_number_generator' >> $COMPLETION_FILE
  3012. return
  3013. fi
  3014. if [[ $USE_HWRNG == "yes" ]]; then
  3015. apt-get -y --force-yes install rng-tools
  3016. sed -i 's|#HRNGDEVICE=/dev/hwrng|HRNGDEVICE=/dev/hwrng|g' /etc/default/rng-tools
  3017. else
  3018. apt-get -y --force-yes install haveged
  3019. fi
  3020. echo 'random_number_generator' >> $COMPLETION_FILE
  3021. }
  3022. function configure_ssh {
  3023. if grep -Fxq "configure_ssh" $COMPLETION_FILE; then
  3024. return
  3025. fi
  3026. sed -i "s/Port 22/Port $SSH_PORT/g" /etc/ssh/sshd_config
  3027. sed -i 's/PermitRootLogin without-password/PermitRootLogin no/g' /etc/ssh/sshd_config
  3028. sed -i 's/X11Forwarding yes/X11Forwarding no/g' /etc/ssh/sshd_config
  3029. sed -i 's/ServerKeyBits 1024/ServerKeyBits 4096/g' /etc/ssh/sshd_config
  3030. sed -i 's/TCPKeepAlive yes/TCPKeepAlive no/g' /etc/ssh/sshd_config
  3031. sed -i 's|HostKey /etc/ssh/ssh_host_dsa_key|#HostKey /etc/ssh/ssh_host_dsa_key|g' /etc/ssh/sshd_config
  3032. sed -i 's|HostKey /etc/ssh/ssh_host_ecdsa_key|#HostKey /etc/ssh/ssh_host_ecdsa_key|g' /etc/ssh/sshd_config
  3033. echo 'ClientAliveInterval 60' >> /etc/ssh/sshd_config
  3034. echo 'ClientAliveCountMax 3' >> /etc/ssh/sshd_config
  3035. echo 'Ciphers aes256-ctr,aes128-ctr' >> /etc/ssh/sshd_config
  3036. echo 'MACs hmac-sha2-512,hmac-sha2-256,hmac-ripemd160
  3037. KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1' >> /etc/ssh/sshd_config
  3038. apt-get -y --force-yes install fail2ban
  3039. echo 'configure_ssh' >> $COMPLETION_FILE
  3040. # Don't reboot if installing within docker
  3041. # random numbers will come from the host system
  3042. if [[ $INSTALLED_WITHIN_DOCKER == "yes" || $INSTALLING_ON_BBB != "yes" ]]; then
  3043. return
  3044. fi
  3045. echo ''
  3046. echo ''
  3047. echo ' *** Rebooting to initialise ssh settings and random number generator ***'
  3048. echo ''
  3049. echo " *** Reconnect via ssh on port $SSH_PORT, then run this script again ***"
  3050. echo ''
  3051. reboot
  3052. }
  3053. function regenerate_ssh_keys {
  3054. if grep -Fxq "regenerate_ssh_keys" $COMPLETION_FILE; then
  3055. return
  3056. fi
  3057. rm -f /etc/ssh/ssh_host_*
  3058. dpkg-reconfigure openssh-server
  3059. service ssh restart
  3060. echo 'regenerate_ssh_keys' >> $COMPLETION_FILE
  3061. }
  3062. function configure_dns {
  3063. if grep -Fxq "configure_dns" $COMPLETION_FILE; then
  3064. return
  3065. fi
  3066. echo 'domain localdomain' > /etc/resolv.conf
  3067. echo 'search localdomain' >> /etc/resolv.conf
  3068. echo 'nameserver 213.73.91.35' >> /etc/resolv.conf
  3069. echo 'nameserver 85.214.20.141' >> /etc/resolv.conf
  3070. echo 'configure_dns' >> $COMPLETION_FILE
  3071. }
  3072. function set_your_domain_name {
  3073. if grep -Fxq "set_your_domain_name" $COMPLETION_FILE; then
  3074. return
  3075. fi
  3076. echo "$DOMAIN_NAME" > /etc/hostname
  3077. hostname $DOMAIN_NAME
  3078. sed -i "s/127.0.1.1 arm/127.0.1.1 $DOMAIN_NAME/g" /etc/hosts
  3079. echo "127.0.1.1 $DOMAIN_NAME" >> /etc/hosts
  3080. echo 'set_your_domain_name' >> $COMPLETION_FILE
  3081. }
  3082. function time_synchronisation {
  3083. if grep -Fxq "time_synchronisation" $COMPLETION_FILE; then
  3084. return
  3085. fi
  3086. #apt-get -y --force-yes install tlsdate
  3087. # building tlsdate from source is a workaround because of
  3088. # this bug https://github.com/ioerror/tlsdate/issues/130
  3089. apt-get -y --force-yes install build-essential automake git pkg-config autoconf libtool libssl-dev libevent-dev
  3090. if [ ! -d $INSTALL_DIR ]; then
  3091. mkdir $INSTALL_DIR
  3092. fi
  3093. cd $INSTALL_DIR
  3094. git clone https://github.com/ioerror/tlsdate.git
  3095. cd $INSTALL_DIR/tlsdate
  3096. ./autogen.sh
  3097. ./configure
  3098. make
  3099. make install
  3100. cp /usr/local/bin/tlsdate* /usr/bin
  3101. cp /usr/local/sbin/tlsdate* /usr/bin
  3102. apt-get -y remove ntpdate
  3103. echo '#!/bin/bash' > /usr/bin/updatedate
  3104. echo "TIMESOURCE='TLS_TIME_SOURCE1'" >> /usr/bin/updatedate
  3105. echo "TIMESOURCE2='TLS_TIME_SOURCE2'" >> /usr/bin/updatedate
  3106. echo 'LOGFILE=/var/log/tlsdate.log' >> /usr/bin/updatedate
  3107. echo 'TIMEOUT=5' >> /usr/bin/updatedate
  3108. echo "EMAIL=$MY_EMAIL_ADDRESS" >> /usr/bin/updatedate
  3109. echo '# File which contains the previous date as a number' >> /usr/bin/updatedate
  3110. echo 'BEFORE_DATE_FILE=/var/log/tlsdateprevious.txt' >> /usr/bin/updatedate
  3111. echo '# File which contains the previous date as a string' >> /usr/bin/updatedate
  3112. echo 'BEFORE_FULLDATE_FILE=/var/log/tlsdate.txt' >> /usr/bin/updatedate
  3113. echo 'DATE_BEFORE=$(date)' >> /usr/bin/updatedate
  3114. echo 'BEFORE=$(date -d "$Y-$M-$D" "+%s")' >> /usr/bin/updatedate
  3115. echo 'BACKWARDS_BETWEEN=0' >> /usr/bin/updatedate
  3116. echo '# If the date was previously set' >> /usr/bin/updatedate
  3117. echo 'if [ -f "$BEFORE_DATE_FILE" ]; then' >> /usr/bin/updatedate
  3118. echo ' BEFORE_FILE=$(cat $BEFORE_DATE_FILE)' >> /usr/bin/updatedate
  3119. echo ' BEFORE_FULLDATE=$(cat $BEFORE_FULLDATE_FILE)' >> /usr/bin/updatedate
  3120. echo ' # is the date going backwards?' >> /usr/bin/updatedate
  3121. echo ' if (( $BEFORE_FILE > $BEFORE )); then' >> /usr/bin/updatedate
  3122. echo ' echo -n "Date went backwards between tlsdate updates. " >> $LOGFILE' >> /usr/bin/updatedate
  3123. echo ' echo -n "$BEFORE_FILE > $BEFORE, " >> $LOGFILE' >> /usr/bin/updatedate
  3124. echo ' echo "$BEFORE_FULLDATE > $DATE_BEFORE" >> $LOGFILE' >> /usr/bin/updatedate
  3125. echo ' # Send a warning email' >> /usr/bin/updatedate
  3126. echo ' echo $(tail $LOGFILE -n 2) | mail -s "tlsdate anomaly" $EMAIL' >> /usr/bin/updatedate
  3127. echo ' # Try another time source' >> /usr/bin/updatedate
  3128. echo ' TIMESOURCE=$TIMESOURCE2' >> /usr/bin/updatedate
  3129. echo ' # try running without any parameters' >> /usr/bin/updatedate
  3130. echo ' tlsdate >> $LOGFILE' >> /usr/bin/updatedate
  3131. echo ' BACKWARDS_BETWEEN=1' >> /usr/bin/updatedate
  3132. echo ' fi' >> /usr/bin/updatedate
  3133. echo 'fi' >> /usr/bin/updatedate
  3134. echo '# Set the date' >> /usr/bin/updatedate
  3135. echo '/usr/bin/timeout $TIMEOUT tlsdate -l -t -H $TIMESOURCE -p 443 >> $LOGFILE' >> /usr/bin/updatedate
  3136. echo 'DATE_AFTER=$(date)' >> /usr/bin/updatedate
  3137. echo 'AFTER=$(date -d "$Y-$M-$D" '+%s')' >> /usr/bin/updatedate
  3138. echo '# After setting the date did it go backwards?' >> /usr/bin/updatedate
  3139. echo 'if (( $AFTER < $BEFORE )); then' >> /usr/bin/updatedate
  3140. echo ' echo "Incorrect date: $DATE_BEFORE -> $DATE_AFTER" >> $LOGFILE' >> /usr/bin/updatedate
  3141. echo ' # Send a warning email' >> /usr/bin/updatedate
  3142. echo ' echo $(tail $LOGFILE -n 2) | mail -s "tlsdate anomaly" $EMAIL' >> /usr/bin/updatedate
  3143. echo ' # Try resetting the date from another time source' >> /usr/bin/updatedate
  3144. echo ' /usr/bin/timeout $TIMEOUT tlsdate -l -t -H $TIMESOURCE2 -p 443 >> $LOGFILE' >> /usr/bin/updatedate
  3145. echo ' DATE_AFTER=$(date)' >> /usr/bin/updatedate
  3146. echo ' AFTER=$(date -d "$Y-$M-$D" "+%s")' >> /usr/bin/updatedate
  3147. echo 'else' >> /usr/bin/updatedate
  3148. echo ' echo -n $TIMESOURCE >> $LOGFILE' >> /usr/bin/updatedate
  3149. echo ' if [ -f "$BEFORE_DATE_FILE" ]; then' >> /usr/bin/updatedate
  3150. echo ' echo -n " " >> $LOGFILE' >> /usr/bin/updatedate
  3151. echo ' echo -n $BEFORE_FILE >> $LOGFILE' >> /usr/bin/updatedate
  3152. echo ' fi' >> /usr/bin/updatedate
  3153. echo ' echo -n " " >> $LOGFILE' >> /usr/bin/updatedate
  3154. echo ' echo -n $BEFORE >> $LOGFILE' >> /usr/bin/updatedate
  3155. echo ' echo -n " " >> $LOGFILE' >> /usr/bin/updatedate
  3156. echo ' echo -n $AFTER >> $LOGFILE' >> /usr/bin/updatedate
  3157. echo ' echo -n " " >> $LOGFILE' >> /usr/bin/updatedate
  3158. echo ' echo $DATE_AFTER >> $LOGFILE' >> /usr/bin/updatedate
  3159. echo 'fi' >> /usr/bin/updatedate
  3160. echo '# Log the last date' >> /usr/bin/updatedate
  3161. echo 'if [[ $BACKWARDS_BETWEEN == 0 ]]; then' >> /usr/bin/updatedate
  3162. echo ' echo "$AFTER" > $BEFORE_DATE_FILE' >> /usr/bin/updatedate
  3163. echo ' echo "$DATE_AFTER" > $BEFORE_FULLDATE_FILE' >> /usr/bin/updatedate
  3164. echo ' exit 0' >> /usr/bin/updatedate
  3165. echo 'else' >> /usr/bin/updatedate
  3166. echo ' exit 1' >> /usr/bin/updatedate
  3167. echo 'fi' >> /usr/bin/updatedate
  3168. chmod +x /usr/bin/updatedate
  3169. echo '*/15 * * * * root /usr/bin/updatedate' >> /etc/crontab
  3170. service cron restart
  3171. echo '#!/bin/bash' > /etc/init.d/tlsdate
  3172. echo '# /etc/init.d/tlsdate' >> /etc/init.d/tlsdate
  3173. echo '### BEGIN INIT INFO' >> /etc/init.d/tlsdate
  3174. echo '# Provides: tlsdate' >> /etc/init.d/tlsdate
  3175. echo '# Required-Start: $remote_fs $syslog' >> /etc/init.d/tlsdate
  3176. echo '# Required-Stop: $remote_fs $syslog' >> /etc/init.d/tlsdate
  3177. echo '# Default-Start: 2 3 4 5' >> /etc/init.d/tlsdate
  3178. echo '# Default-Stop: 0 1 6' >> /etc/init.d/tlsdate
  3179. echo '# Short-Description: Initially calls tlsdate with the timewarp option' >> /etc/init.d/tlsdate
  3180. echo '# Description: Initially calls tlsdate with the timewarp option' >> /etc/init.d/tlsdate
  3181. echo '### END INIT INFO' >> /etc/init.d/tlsdate
  3182. echo '# Author: Bob Mottram <bob@robotics.uk.to>' >> /etc/init.d/tlsdate
  3183. echo 'PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/usr/sbin:/bin"' >> /etc/init.d/tlsdate
  3184. echo 'LOGFILE="/var/log/tlsdate.log"' >> /etc/init.d/tlsdate
  3185. echo 'TLSDATECOMMAND="tlsdate --timewarp -l -H www.ptb.de -p 443 >> $LOGFILE"' >> /etc/init.d/tlsdate
  3186. echo '#Start-Stop here' >> /etc/init.d/tlsdate
  3187. echo 'case "$1" in' >> /etc/init.d/tlsdate
  3188. echo ' start)' >> /etc/init.d/tlsdate
  3189. echo ' echo "tlsdate started"' >> /etc/init.d/tlsdate
  3190. echo ' $TLSDATECOMMAND' >> /etc/init.d/tlsdate
  3191. echo ' ;;' >> /etc/init.d/tlsdate
  3192. echo ' stop)' >> /etc/init.d/tlsdate
  3193. echo ' echo "tlsdate stopped"' >> /etc/init.d/tlsdate
  3194. echo ' ;;' >> /etc/init.d/tlsdate
  3195. echo ' restart)' >> /etc/init.d/tlsdate
  3196. echo ' echo "tlsdate restarted"' >> /etc/init.d/tlsdate
  3197. echo ' $TLSDATECOMMAND' >> /etc/init.d/tlsdate
  3198. echo ' ;;' >> /etc/init.d/tlsdate
  3199. echo ' *)' >> /etc/init.d/tlsdate
  3200. echo ' echo "Usage: $0 {start|stop|restart}"' >> /etc/init.d/tlsdate
  3201. echo ' exit 1' >> /etc/init.d/tlsdate
  3202. echo ' ;;' >> /etc/init.d/tlsdate
  3203. echo 'esac' >> /etc/init.d/tlsdate
  3204. echo 'exit 0' >> /etc/init.d/tlsdate
  3205. chmod +x /etc/init.d/tlsdate
  3206. update-rc.d tlsdate defaults
  3207. echo 'time_synchronisation' >> $COMPLETION_FILE
  3208. }
  3209. function configure_firewall {
  3210. if grep -Fxq "configure_firewall" $COMPLETION_FILE; then
  3211. return
  3212. fi
  3213. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  3214. # docker does its own firewalling
  3215. return
  3216. fi
  3217. iptables -P INPUT ACCEPT
  3218. ip6tables -P INPUT ACCEPT
  3219. iptables -F
  3220. ip6tables -F
  3221. iptables -t nat -F
  3222. ip6tables -t nat -F
  3223. iptables -X
  3224. ip6tables -X
  3225. iptables -P INPUT DROP
  3226. ip6tables -P INPUT DROP
  3227. iptables -A INPUT -i lo -j ACCEPT
  3228. iptables -A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  3229. # Make sure incoming tcp connections are SYN packets
  3230. iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
  3231. # Drop packets with incoming fragments
  3232. iptables -A INPUT -f -j DROP
  3233. # Drop bogons
  3234. iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
  3235. iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
  3236. iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
  3237. # Incoming malformed NULL packets:
  3238. iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
  3239. echo 'configure_firewall' >> $COMPLETION_FILE
  3240. }
  3241. function save_firewall_settings {
  3242. iptables-save > /etc/firewall.conf
  3243. ip6tables-save > /etc/firewall6.conf
  3244. printf '#!/bin/sh\n' > /etc/network/if-up.d/iptables
  3245. printf 'iptables-restore < /etc/firewall.conf\n' >> /etc/network/if-up.d/iptables
  3246. printf 'ip6tables-restore < /etc/firewall6.conf\n' >> /etc/network/if-up.d/iptables
  3247. chmod +x /etc/network/if-up.d/iptables
  3248. }
  3249. function configure_firewall_for_dlna {
  3250. if grep -Fxq "configure_firewall_for_dlna" $COMPLETION_FILE; then
  3251. return
  3252. fi
  3253. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  3254. # docker does its own firewalling
  3255. return
  3256. fi
  3257. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  3258. return
  3259. fi
  3260. iptables -A INPUT -i eth0 -p udp --dport 1900 -j ACCEPT
  3261. iptables -A INPUT -i eth0 -p tcp --dport 8200 -j ACCEPT
  3262. save_firewall_settings
  3263. echo 'configure_firewall_for_dlna' >> $COMPLETION_FILE
  3264. }
  3265. function configure_firewall_for_dns {
  3266. if grep -Fxq "configure_firewall_for_dns" $COMPLETION_FILE; then
  3267. return
  3268. fi
  3269. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  3270. # docker does its own firewalling
  3271. return
  3272. fi
  3273. iptables -A INPUT -i eth0 -p udp -m udp --dport 1024:65535 --sport 53 -j ACCEPT
  3274. save_firewall_settings
  3275. echo 'configure_firewall_for_dns' >> $COMPLETION_FILE
  3276. }
  3277. function configure_firewall_for_xmpp {
  3278. if [ ! -d /etc/prosody ]; then
  3279. return
  3280. fi
  3281. if grep -Fxq "configure_firewall_for_xmpp" $COMPLETION_FILE; then
  3282. return
  3283. fi
  3284. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  3285. # docker does its own firewalling
  3286. return
  3287. fi
  3288. iptables -A INPUT -i eth0 -p tcp --dport 5222:5223 -j ACCEPT
  3289. iptables -A INPUT -i eth0 -p tcp --dport 5269 -j ACCEPT
  3290. iptables -A INPUT -i eth0 -p tcp --dport 5280:5281 -j ACCEPT
  3291. save_firewall_settings
  3292. echo 'configure_firewall_for_xmpp' >> $COMPLETION_FILE
  3293. }
  3294. function configure_firewall_for_irc {
  3295. if [ ! -d /etc/ngircd ]; then
  3296. return
  3297. fi
  3298. if grep -Fxq "configure_firewall_for_irc" $COMPLETION_FILE; then
  3299. return
  3300. fi
  3301. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  3302. # docker does its own firewalling
  3303. return
  3304. fi
  3305. iptables -A INPUT -i eth0 -p tcp --dport 6697 -j ACCEPT
  3306. iptables -I INPUT -i eth0 -p tcp --dport 1024:65535 --sport 6697 -j ACCEPT
  3307. iptables -A INPUT -i eth0 -p tcp --dport 9999 -j ACCEPT
  3308. save_firewall_settings
  3309. echo 'configure_firewall_for_irc' >> $COMPLETION_FILE
  3310. }
  3311. function configure_firewall_for_ftp {
  3312. if grep -Fxq "configure_firewall_for_ftp" $COMPLETION_FILE; then
  3313. return
  3314. fi
  3315. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  3316. # docker does its own firewalling
  3317. return
  3318. fi
  3319. iptables -I INPUT -i eth0 -p tcp --dport 1024:65535 --sport 20:21 -j ACCEPT
  3320. save_firewall_settings
  3321. echo 'configure_firewall_for_ftp' >> $COMPLETION_FILE
  3322. }
  3323. function configure_firewall_for_web_access {
  3324. if grep -Fxq "configure_firewall_for_web_access" $COMPLETION_FILE; then
  3325. return
  3326. fi
  3327. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  3328. # docker does its own firewalling
  3329. return
  3330. fi
  3331. iptables -A INPUT -i eth0 -p tcp --dport 32768:61000 --sport 80 -j ACCEPT
  3332. iptables -A INPUT -i eth0 -p tcp --dport 32768:61000 --sport 443 -j ACCEPT
  3333. save_firewall_settings
  3334. echo 'configure_firewall_for_web_access' >> $COMPLETION_FILE
  3335. }
  3336. function configure_firewall_for_web_server {
  3337. if grep -Fxq "configure_firewall_for_web_server" $COMPLETION_FILE; then
  3338. return
  3339. fi
  3340. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  3341. # docker does its own firewalling
  3342. return
  3343. fi
  3344. iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
  3345. iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
  3346. save_firewall_settings
  3347. echo 'configure_firewall_for_web_server' >> $COMPLETION_FILE
  3348. }
  3349. function configure_firewall_for_ssh {
  3350. if grep -Fxq "configure_firewall_for_ssh" $COMPLETION_FILE; then
  3351. return
  3352. fi
  3353. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  3354. # docker does its own firewalling
  3355. return
  3356. fi
  3357. iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
  3358. iptables -A INPUT -i eth0 -p tcp --dport $SSH_PORT -j ACCEPT
  3359. save_firewall_settings
  3360. echo 'configure_firewall_for_ssh' >> $COMPLETION_FILE
  3361. }
  3362. function configure_firewall_for_git {
  3363. if grep -Fxq "configure_firewall_for_git" $COMPLETION_FILE; then
  3364. return
  3365. fi
  3366. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  3367. # docker does its own firewalling
  3368. return
  3369. fi
  3370. iptables -A INPUT -i eth0 -p tcp --dport 9418 -j ACCEPT
  3371. save_firewall_settings
  3372. echo 'configure_firewall_for_git' >> $COMPLETION_FILE
  3373. }
  3374. function configure_firewall_for_email {
  3375. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  3376. return
  3377. fi
  3378. if grep -Fxq "configure_firewall_for_email" $COMPLETION_FILE; then
  3379. return
  3380. fi
  3381. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  3382. # docker does its own firewalling
  3383. return
  3384. fi
  3385. iptables -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT
  3386. iptables -A INPUT -i eth0 -p tcp --dport 587 -j ACCEPT
  3387. iptables -A INPUT -i eth0 -p tcp --dport 465 -j ACCEPT
  3388. iptables -A INPUT -i eth0 -p tcp --dport 993 -j ACCEPT
  3389. save_firewall_settings
  3390. echo 'configure_firewall_for_email' >> $COMPLETION_FILE
  3391. }
  3392. function configure_internet_protocol {
  3393. if grep -Fxq "configure_internet_protocol" $COMPLETION_FILE; then
  3394. return
  3395. fi
  3396. sed -i "s/#net.ipv4.tcp_syncookies=1/net.ipv4.tcp_syncookies=1/g" /etc/sysctl.conf
  3397. sed -i "s/#net.ipv4.conf.all.accept_redirects = 0/net.ipv4.conf.all.accept_redirects = 0/g" /etc/sysctl.conf
  3398. sed -i "s/#net.ipv6.conf.all.accept_redirects = 0/net.ipv6.conf.all.accept_redirects = 0/g" /etc/sysctl.conf
  3399. sed -i "s/#net.ipv4.conf.all.send_redirects = 0/net.ipv4.conf.all.send_redirects = 0/g" /etc/sysctl.conf
  3400. sed -i "s/#net.ipv4.conf.all.accept_source_route = 0/net.ipv4.conf.all.accept_source_route = 0/g" /etc/sysctl.conf
  3401. sed -i "s/#net.ipv6.conf.all.accept_source_route = 0/net.ipv6.conf.all.accept_source_route = 0/g" /etc/sysctl.conf
  3402. sed -i "s/#net.ipv4.conf.default.rp_filter=1/net.ipv4.conf.default.rp_filter=1/g" /etc/sysctl.conf
  3403. sed -i "s/#net.ipv4.conf.all.rp_filter=1/net.ipv4.conf.all.rp_filter=1/g" /etc/sysctl.conf
  3404. sed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=0/g" /etc/sysctl.conf
  3405. sed -i "s/#net.ipv6.conf.all.forwarding=1/net.ipv6.conf.all.forwarding=0/g" /etc/sysctl.conf
  3406. echo '# ignore pings' >> /etc/sysctl.conf
  3407. echo 'net.ipv4.icmp_echo_ignore_all = 1' >> /etc/sysctl.conf
  3408. echo 'net.ipv6.icmp_echo_ignore_all = 1' >> /etc/sysctl.conf
  3409. echo '# disable ipv6' >> /etc/sysctl.conf
  3410. echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf
  3411. echo 'net.ipv4.tcp_synack_retries = 2' >> /etc/sysctl.conf
  3412. echo 'net.ipv4.tcp_syn_retries = 1' >> /etc/sysctl.conf
  3413. echo '# keepalive' >> /etc/sysctl.conf
  3414. echo 'net.ipv4.tcp_keepalive_probes = 9' >> /etc/sysctl.conf
  3415. echo 'net.ipv4.tcp_keepalive_intvl = 75' >> /etc/sysctl.conf
  3416. echo 'net.ipv4.tcp_keepalive_time = 7200' >> /etc/sysctl.conf
  3417. echo 'configure_internet_protocol' >> $COMPLETION_FILE
  3418. }
  3419. function script_to_make_self_signed_certificates {
  3420. if grep -Fxq "script_to_make_self_signed_certificates" $COMPLETION_FILE; then
  3421. return
  3422. fi
  3423. echo '#!/bin/bash' > /usr/bin/makecert
  3424. echo 'HOSTNAME=$1' >> /usr/bin/makecert
  3425. echo 'COUNTRY_CODE="US"' >> /usr/bin/makecert
  3426. echo 'AREA="Free Speech Zone"' >> /usr/bin/makecert
  3427. echo 'LOCATION="Freedomville"' >> /usr/bin/makecert
  3428. echo 'ORGANISATION="Freedombone"' >> /usr/bin/makecert
  3429. echo 'UNIT="Freedombone Unit"' >> /usr/bin/makecert
  3430. echo 'if ! which openssl > /dev/null ;then' >> /usr/bin/makecert
  3431. echo ' echo "$0: openssl is not installed, exiting" 1>&2' >> /usr/bin/makecert
  3432. echo ' exit 1' >> /usr/bin/makecert
  3433. echo 'fi' >> /usr/bin/makecert
  3434. 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
  3435. echo 'openssl dhparam -check -text -5 1024 -out /etc/ssl/certs/$HOSTNAME.dhparam' >> /usr/bin/makecert
  3436. echo 'chmod 400 /etc/ssl/private/$HOSTNAME.key' >> /usr/bin/makecert
  3437. echo 'chmod 640 /etc/ssl/certs/$HOSTNAME.crt' >> /usr/bin/makecert
  3438. echo 'chmod 640 /etc/ssl/certs/$HOSTNAME.dhparam' >> /usr/bin/makecert
  3439. echo 'if [ -f /etc/init.d/nginx ]; then' >> /usr/bin/makecert
  3440. echo ' /etc/init.d/nginx reload' >> /usr/bin/makecert
  3441. echo 'fi' >> /usr/bin/makecert
  3442. echo '# add the public certificate to a separate directory' >> /usr/bin/makecert
  3443. echo '# so that we can redistribute it easily' >> /usr/bin/makecert
  3444. echo 'if [ ! -d /etc/ssl/mycerts ]; then' >> /usr/bin/makecert
  3445. echo ' mkdir /etc/ssl/mycerts' >> /usr/bin/makecert
  3446. echo 'fi' >> /usr/bin/makecert
  3447. echo 'cp /etc/ssl/certs/$HOSTNAME.crt /etc/ssl/mycerts' >> /usr/bin/makecert
  3448. echo '# Create a bundle of your certificates' >> /usr/bin/makecert
  3449. echo 'cat /etc/ssl/mycerts/*.crt > /etc/ssl/freedombone-bundle.crt' >> /usr/bin/makecert
  3450. echo 'tar -czvf /etc/ssl/freedombone-certs.tar.gz /etc/ssl/mycerts/*.crt' >> /usr/bin/makecert
  3451. chmod +x /usr/bin/makecert
  3452. echo 'script_to_make_self_signed_certificates' >> $COMPLETION_FILE
  3453. }
  3454. function configure_email {
  3455. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  3456. return
  3457. fi
  3458. if grep -Fxq "configure_email" $COMPLETION_FILE; then
  3459. return
  3460. fi
  3461. apt-get -y remove postfix
  3462. apt-get -y --force-yes install exim4 sasl2-bin swaks libnet-ssleay-perl procmail
  3463. if [ ! -d /etc/exim4 ]; then
  3464. echo "ERROR: Exim does not appear to have installed. $CHECK_MESSAGE"
  3465. exit 48
  3466. fi
  3467. # configure for Maildir format
  3468. sed -i 's/MAIL_DIR/#MAIL_DIR/g' /etc/login.defs
  3469. sed -i 's|#MAIL_FILE.*|MAIL_FILE Maildir/|g' /etc/login.defs
  3470. if ! grep -q "export MAIL" /etc/profile; then
  3471. echo 'export MAIL=~/Maildir' >> /etc/profile
  3472. fi
  3473. sed -i 's|pam_mail.so standard|pam_mail.so dir=~/Maildir standard|g' /etc/pam.d/login
  3474. sed -i 's|pam_mail.so standard noenv|pam_mail.so dir=~/Maildir standard|g' /etc/pam.d/sshd
  3475. sed -i 's|pam_mail.so nopen|pam_mail.so dir=~/Maildir nopen|g' /etc/pam.d/su
  3476. echo 'dc_eximconfig_configtype="internet"' > /etc/exim4/update-exim4.conf.conf
  3477. echo "dc_other_hostnames='$DOMAIN_NAME'" >> /etc/exim4/update-exim4.conf.conf
  3478. echo "dc_local_interfaces=''" >> /etc/exim4/update-exim4.conf.conf
  3479. echo "dc_readhost=''" >> /etc/exim4/update-exim4.conf.conf
  3480. echo "dc_relay_domains=''" >> /etc/exim4/update-exim4.conf.conf
  3481. echo "dc_minimaldns='false'" >> /etc/exim4/update-exim4.conf.conf
  3482. echo "dc_relay_nets='192.168.1.0/24'" >> /etc/exim4/update-exim4.conf.conf
  3483. echo "dc_smarthost=''" >> /etc/exim4/update-exim4.conf.conf
  3484. echo "CFILEMODE='644'" >> /etc/exim4/update-exim4.conf.conf
  3485. echo "dc_use_split_config='false'" >> /etc/exim4/update-exim4.conf.conf
  3486. echo "dc_hide_mailname=''" >> /etc/exim4/update-exim4.conf.conf
  3487. echo "dc_mailname_in_oh='true'" >> /etc/exim4/update-exim4.conf.conf
  3488. echo "dc_localdelivery='maildir_home'" >> /etc/exim4/update-exim4.conf.conf
  3489. update-exim4.conf
  3490. sed -i "s/START=no/START=yes/g" /etc/default/saslauthd
  3491. /etc/init.d/saslauthd start
  3492. # make a tls certificate for email
  3493. if [ ! -f /etc/ssl/private/exim.key ]; then
  3494. makecert exim
  3495. fi
  3496. cp /etc/ssl/private/exim.key /etc/exim4
  3497. cp /etc/ssl/certs/exim.crt /etc/exim4
  3498. cp /etc/ssl/certs/exim.dhparam /etc/exim4
  3499. chown root:Debian-exim /etc/exim4/exim.key /etc/exim4/exim.crt /etc/exim4/exim.dhparam
  3500. chmod 640 /etc/exim4/exim.key /etc/exim4/exim.crt /etc/exim4/exim.dhparam
  3501. sed -i '/login_saslauthd_server/,/.endif/ s/# *//' /etc/exim4/exim4.conf.template
  3502. sed -i "/.ifdef MAIN_HARDCODE_PRIMARY_HOSTNAME/i\MAIN_HARDCODE_PRIMARY_HOSTNAME = $DOMAIN_NAME\nMAIN_TLS_ENABLE = true" /etc/exim4/exim4.conf.template
  3503. sed -i "s|SMTPLISTENEROPTIONS=''|SMTPLISTENEROPTIONS='-oX 465:25:587 -oP /var/run/exim4/exim.pid'|g" /etc/default/exim4
  3504. if ! grep -q "tls_on_connect_ports=465" /etc/exim4/exim4.conf.template; then
  3505. sed -i '/SSL configuration for exim/i\tls_on_connect_ports=465' /etc/exim4/exim4.conf.template
  3506. fi
  3507. adduser $MY_USERNAME sasl
  3508. addgroup Debian-exim sasl
  3509. /etc/init.d/exim4 restart
  3510. if [ ! -d /etc/skel/Maildir ]; then
  3511. mkdir -m 700 /etc/skel/Maildir
  3512. mkdir -m 700 /etc/skel/Maildir/Sent
  3513. mkdir -m 700 /etc/skel/Maildir/Sent/tmp
  3514. mkdir -m 700 /etc/skel/Maildir/Sent/cur
  3515. mkdir -m 700 /etc/skel/Maildir/Sent/new
  3516. mkdir -m 700 /etc/skel/Maildir/.learn-spam
  3517. mkdir -m 700 /etc/skel/Maildir/.learn-spam/cur
  3518. mkdir -m 700 /etc/skel/Maildir/.learn-spam/new
  3519. mkdir -m 700 /etc/skel/Maildir/.learn-spam/tmp
  3520. mkdir -m 700 /etc/skel/Maildir/.learn-ham
  3521. mkdir -m 700 /etc/skel/Maildir/.learn-ham/cur
  3522. mkdir -m 700 /etc/skel/Maildir/.learn-ham/new
  3523. mkdir -m 700 /etc/skel/Maildir/.learn-ham/tmp
  3524. ln -s /etc/skel/Maildir/.learn-spam /etc/skel/Maildir/spam
  3525. ln -s /etc/skel/Maildir/.learn-ham /etc/skel/Maildir/ham
  3526. fi
  3527. if [ ! -d /home/$MY_USERNAME/Maildir ]; then
  3528. mkdir -m 700 /home/$MY_USERNAME/Maildir
  3529. mkdir -m 700 /home/$MY_USERNAME/Maildir/cur
  3530. mkdir -m 700 /home/$MY_USERNAME/Maildir/tmp
  3531. mkdir -m 700 /home/$MY_USERNAME/Maildir/new
  3532. mkdir -m 700 /home/$MY_USERNAME/Maildir/Sent
  3533. mkdir -m 700 /home/$MY_USERNAME/Maildir/Sent/cur
  3534. mkdir -m 700 /home/$MY_USERNAME/Maildir/Sent/tmp
  3535. mkdir -m 700 /home/$MY_USERNAME/Maildir/Sent/new
  3536. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-spam
  3537. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-spam/cur
  3538. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-spam/new
  3539. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-spam/tmp
  3540. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-ham
  3541. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-ham/cur
  3542. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-ham/new
  3543. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-ham/tmp
  3544. ln -s /home/$MY_USERNAME/Maildir/.learn-spam /home/$MY_USERNAME/Maildir/spam
  3545. ln -s /home/$MY_USERNAME/Maildir/.learn-ham /home/$MY_USERNAME/Maildir/ham
  3546. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Maildir
  3547. fi
  3548. echo 'configure_email' >> $COMPLETION_FILE
  3549. }
  3550. function create_procmail {
  3551. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  3552. return
  3553. fi
  3554. if grep -Fxq "create_procmail" $COMPLETION_FILE; then
  3555. return
  3556. fi
  3557. if [ ! -f /home/$MY_USERNAME/.procmailrc ]; then
  3558. echo 'MAILDIR=$HOME/Maildir' > /home/$MY_USERNAME/.procmailrc
  3559. echo 'DEFAULT=$MAILDIR/' >> /home/$MY_USERNAME/.procmailrc
  3560. echo 'LOGFILE=$HOME/log/procmail.log' >> /home/$MY_USERNAME/.procmailrc
  3561. echo 'LOGABSTRACT=all' >> /home/$MY_USERNAME/.procmailrc
  3562. fi
  3563. echo 'create_procmail' >> $COMPLETION_FILE
  3564. }
  3565. function spam_filtering {
  3566. # NOTE: spamassassin installation currently doesn't work, sa-compile fails with a make error 23/09/2014
  3567. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  3568. return
  3569. fi
  3570. if grep -Fxq "spam_filtering" $COMPLETION_FILE; then
  3571. return
  3572. fi
  3573. apt-get -y --force-yes install exim4-daemon-heavy
  3574. apt-get -y --force-yes install spamassassin
  3575. sa-update -v
  3576. sed -i 's/ENABLED=0/ENABLED=1/g' /etc/default/spamassassin
  3577. sed -i 's/# spamd_address = 127.0.0.1 783/spamd_address = 127.0.0.1 783/g' /etc/exim4/exim4.conf.template
  3578. # This configuration is based on https://wiki.debian.org/DebianSpamAssassin
  3579. sed -i 's/local_parts = postmaster/local_parts = postmaster:abuse/g' /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt
  3580. sed -i '/domains = +local_domains : +relay_to_domains/a\ set acl_m0 = rfcnames' /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt
  3581. sed -i 's/accept/accept condition = ${if eq{$acl_m0}{rfcnames} {1}{0}}/g' /etc/exim4/conf.d/acl/40_exim4-config_check_data
  3582. echo 'warn message = X-Spam-Score: $spam_score ($spam_bar)' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  3583. echo ' spam = nobody:true' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  3584. echo 'warn message = X-Spam-Flag: YES' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  3585. echo ' spam = nobody' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  3586. echo 'warn message = X-Spam-Report: $spam_report' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  3587. echo ' spam = nobody' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  3588. echo '# reject spam at high scores (> 12)' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  3589. echo 'deny message = This message scored $spam_score spam points.' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  3590. echo ' spam = nobody:true' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  3591. echo ' condition = ${if >{$spam_score_int}{120}{1}{0}}' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  3592. # procmail configuration
  3593. echo '# get spamassassin to check emails' >> /home/$MY_USERNAME/.procmailrc
  3594. echo ':0fw: .spamassassin.lock' >> /home/$MY_USERNAME/.procmailrc
  3595. echo ' * < 256000' >> /home/$MY_USERNAME/.procmailrc
  3596. echo '| spamc' >> /home/$MY_USERNAME/.procmailrc
  3597. echo '# strong spam are discarded' >> /home/$MY_USERNAME/.procmailrc
  3598. echo ':0' >> /home/$MY_USERNAME/.procmailrc
  3599. echo ' * ^X-Spam-Level: \*\*\*\*\*\*' >> /home/$MY_USERNAME/.procmailrc
  3600. echo '/dev/null' >> /home/$MY_USERNAME/.procmailrc
  3601. echo '# weak spam are kept just in case - clear this out every now and then' >> /home/$MY_USERNAME/.procmailrc
  3602. echo ':0' >> /home/$MY_USERNAME/.procmailrc
  3603. echo ' * ^X-Spam-Level: \*\*\*\*\*' >> /home/$MY_USERNAME/.procmailrc
  3604. echo '.0-spam/' >> /home/$MY_USERNAME/.procmailrc
  3605. echo '# otherwise, marginal spam goes here for revision' >> /home/$MY_USERNAME/.procmailrc
  3606. echo ':0' >> /home/$MY_USERNAME/.procmailrc
  3607. echo ' * ^X-Spam-Level: \*\*' >> /home/$MY_USERNAME/.procmailrc
  3608. echo '.spam/' >> /home/$MY_USERNAME/.procmailrc
  3609. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.procmailrc
  3610. # filtering scripts
  3611. echo '#!/bin/bash' > /usr/bin/filterspam
  3612. echo 'USERNAME=$1' >> /usr/bin/filterspam
  3613. echo 'MAILDIR=/home/$USERNAME/Maildir/.learn-spam' >> /usr/bin/filterspam
  3614. echo 'if [ ! -d "$MAILDIR" ]; then' >> /usr/bin/filterspam
  3615. echo ' exit' >> /usr/bin/filterspam
  3616. echo 'fi' >> /usr/bin/filterspam
  3617. echo 'for f in `ls $MAILDIR/cur`' >> /usr/bin/filterspam
  3618. echo 'do' >> /usr/bin/filterspam
  3619. echo ' spamc -L spam < "$MAILDIR/cur/$f" > /dev/null' >> /usr/bin/filterspam
  3620. echo ' rm "$MAILDIR/cur/$f"' >> /usr/bin/filterspam
  3621. echo 'done' >> /usr/bin/filterspam
  3622. echo 'for f in `ls $MAILDIR/new`' >> /usr/bin/filterspam
  3623. echo 'do' >> /usr/bin/filterspam
  3624. echo ' spamc -L spam < "$MAILDIR/new/$f" > /dev/null' >> /usr/bin/filterspam
  3625. echo ' rm "$MAILDIR/new/$f"' >> /usr/bin/filterspam
  3626. echo 'done' >> /usr/bin/filterspam
  3627. echo '#!/bin/bash' > /usr/bin/filterham
  3628. echo 'USERNAME=$1' >> /usr/bin/filterham
  3629. echo 'MAILDIR=/home/$USERNAME/Maildir/.learn-ham' >> /usr/bin/filterham
  3630. echo 'if [ ! -d "$MAILDIR" ]; then' >> /usr/bin/filterham
  3631. echo ' exit' >> /usr/bin/filterham
  3632. echo 'fi' >> /usr/bin/filterham
  3633. echo 'for f in `ls $MAILDIR/cur`' >> /usr/bin/filterham
  3634. echo 'do' >> /usr/bin/filterham
  3635. echo ' spamc -L ham < "$MAILDIR/cur/$f" > /dev/null' >> /usr/bin/filterham
  3636. echo ' rm "$MAILDIR/cur/$f"' >> /usr/bin/filterham
  3637. echo 'done' >> /usr/bin/filterham
  3638. echo 'for f in `ls $MAILDIR/new`' >> /usr/bin/filterham
  3639. echo 'do' >> /usr/bin/filterham
  3640. echo ' spamc -L ham < "$MAILDIR/new/$f" > /dev/null' >> /usr/bin/filterham
  3641. echo ' rm "$MAILDIR/new/$f"' >> /usr/bin/filterham
  3642. echo 'done' >> /usr/bin/filterham
  3643. if ! grep -q "filterspam" /etc/crontab; then
  3644. echo "*/3 * * * * root /usr/bin/timeout 120 /usr/bin/filterspam $MY_USERNAME" >> /etc/crontab
  3645. fi
  3646. if ! grep -q "filterham" /etc/crontab; then
  3647. echo "*/3 * * * * root /usr/bin/timeout 120 /usr/bin/filterham $MY_USERNAME" >> /etc/crontab
  3648. fi
  3649. chmod 655 /usr/bin/filterspam /usr/bin/filterham
  3650. sed -i 's/# use_bayes 1/use_bayes 1/g' /etc/mail/spamassassin/local.cf
  3651. sed -i 's/# bayes_auto_learn 1/bayes_auto_learn 1/g' /etc/mail/spamassassin/local.cf
  3652. service spamassassin restart
  3653. service exim4 restart
  3654. service cron restart
  3655. echo 'spam_filtering' >> $COMPLETION_FILE
  3656. }
  3657. function configure_imap {
  3658. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  3659. return
  3660. fi
  3661. if grep -Fxq "configure_imap" $COMPLETION_FILE; then
  3662. return
  3663. fi
  3664. apt-get -y --force-yes install dovecot-common dovecot-imapd
  3665. if [ ! -d /etc/dovecot ]; then
  3666. echo "ERROR: Dovecot does not appear to have installed. $CHECK_MESSAGE"
  3667. exit 48
  3668. fi
  3669. if [ ! -f /etc/ssl/private/dovecot.key ]; then
  3670. makecert dovecot
  3671. fi
  3672. chown root:dovecot /etc/ssl/certs/dovecot.*
  3673. chown root:dovecot /etc/ssl/private/dovecot.*
  3674. sed -i 's|#ssl = yes|ssl = required|g' /etc/dovecot/conf.d/10-ssl.conf
  3675. sed -i 's|ssl_cert = </etc/dovecot/dovecot.pem|ssl_cert = </etc/ssl/certs/dovecot.crt|g' /etc/dovecot/conf.d/10-ssl.conf
  3676. 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
  3677. sed -i 's|#ssl_dh_parameters_length = 1024|ssl_dh_parameters_length = 1024|g' /etc/dovecot/conf.d/10-ssl.conf
  3678. sed -i 's/#ssl_prefer_server_ciphers = no/ssl_prefer_server_ciphers = yes/g' /etc/dovecot/conf.d/10-ssl.conf
  3679. echo "ssl_cipher_list = '$SSL_CIPHERS'" >> /etc/dovecot/conf.d/10-ssl.conf
  3680. sed -i 's/#process_limit = 1024/process_limit = 5/g' /etc/dovecot/conf.d/10-master.conf
  3681. sed -i 's/#default_client_limit = 1000/default_client_limit = 5/g' /etc/dovecot/conf.d/10-master.conf
  3682. sed -i 's/#auth_verbose = no/auth_verbose = yes/g' /etc/dovecot/conf.d/10-logging.conf
  3683. sed -i 's/#listen = *, ::/listen = */g' /etc/dovecot/dovecot.conf
  3684. sed -i 's/#disable_plaintext_auth = yes/disable_plaintext_auth = no/g' /etc/dovecot/conf.d/10-auth.conf
  3685. sed -i 's/auth_mechanisms = plain/auth_mechanisms = plain login/g' /etc/dovecot/conf.d/10-auth.conf
  3686. 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
  3687. service dovecot restart
  3688. echo 'configure_imap' >> $COMPLETION_FILE
  3689. }
  3690. function configure_gpg {
  3691. if grep -Fxq "configure_gpg" $COMPLETION_FILE; then
  3692. return
  3693. fi
  3694. apt-get -y --force-yes install gnupg
  3695. # if gpg keys directory was previously imported from usb
  3696. if [[ $GPG_KEYS_IMPORTED == "yes" && -d /home/$MY_USERNAME/.gnupg ]]; then
  3697. sed -i "s|keyserver hkp://keys.gnupg.net|keyserver $GPG_KEYSERVER|g" /home/$MY_USERNAME/.gnupg/gpg.conf
  3698. 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}')
  3699. echo 'configure_gpg' >> $COMPLETION_FILE
  3700. return
  3701. fi
  3702. if [ ! -d /home/$MY_USERNAME/.gnupg ]; then
  3703. mkdir /home/$MY_USERNAME/.gnupg
  3704. echo 'keyserver hkp://keys.gnupg.net' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  3705. echo 'keyserver-options auto-key-retrieve' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  3706. fi
  3707. sed -i "s|keyserver hkp://keys.gnupg.net|keyserver $GPG_KEYSERVER|g" /home/$MY_USERNAME/.gnupg/gpg.conf
  3708. if ! grep -q "# default preferences" /home/$MY_USERNAME/.gnupg/gpg.conf; then
  3709. echo '' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  3710. echo '# default preferences' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  3711. echo 'personal-digest-preferences SHA256' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  3712. echo 'cert-digest-algo SHA256' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  3713. echo 'default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  3714. fi
  3715. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
  3716. if [[ $MY_GPG_PUBLIC_KEY && $MY_GPG_PRIVATE_KEY ]]; then
  3717. # use your existing GPG keys which were exported
  3718. if [ ! -f $MY_GPG_PUBLIC_KEY ]; then
  3719. echo "GPG public key file $MY_GPG_PUBLIC_KEY was not found"
  3720. exit 5
  3721. fi
  3722. if [ ! -f $MY_GPG_PRIVATE_KEY ]; then
  3723. echo "GPG private key file $MY_GPG_PRIVATE_KEY was not found"
  3724. exit 6
  3725. fi
  3726. su -c "gpg --import $MY_GPG_PUBLIC_KEY" - $MY_USERNAME
  3727. su -c "gpg --allow-secret-key-import --import $MY_GPG_PRIVATE_KEY" - $MY_USERNAME
  3728. # for security ensure that the private key file doesn't linger around
  3729. shred -zu $MY_GPG_PRIVATE_KEY
  3730. 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}')
  3731. else
  3732. # Generate a GPG key
  3733. echo 'Key-Type: 1' > /home/$MY_USERNAME/gpg-genkey.conf
  3734. echo 'Key-Length: 4096' >> /home/$MY_USERNAME/gpg-genkey.conf
  3735. echo 'Subkey-Type: 1' >> /home/$MY_USERNAME/gpg-genkey.conf
  3736. echo 'Subkey-Length: 4096' >> /home/$MY_USERNAME/gpg-genkey.conf
  3737. echo "Name-Real: $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/gpg-genkey.conf
  3738. echo "Name-Email: $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/gpg-genkey.conf
  3739. echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
  3740. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
  3741. su -c "gpg --batch --gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME
  3742. shred -zu /home/$MY_USERNAME/gpg-genkey.conf
  3743. 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}')
  3744. MY_GPG_PUBLIC_KEY=/tmp/public_key.gpg
  3745. su -c "gpg --output $MY_GPG_PUBLIC_KEY --armor --export $MY_GPG_PUBLIC_KEY_ID" - $MY_USERNAME
  3746. if grep -q "configure_email" $COMPLETION_FILE; then
  3747. if ! grep -q "Change your GPG password" /home/$MY_USERNAME/README; then
  3748. echo '' >> /home/$MY_USERNAME/README
  3749. echo '' >> /home/$MY_USERNAME/README
  3750. echo 'Change your GPG password' >> /home/$MY_USERNAME/README
  3751. echo '========================' >> /home/$MY_USERNAME/README
  3752. echo "It's very important to add a password to your GPG key so that" >> /home/$MY_USERNAME/README
  3753. echo "if anyone does get access to your email they still won't be able" >> /home/$MY_USERNAME/README
  3754. echo 'to read them without knowning the GPG password.' >> /home/$MY_USERNAME/README
  3755. echo 'You can change the it with:' >> /home/$MY_USERNAME/README
  3756. echo '' >> /home/$MY_USERNAME/README
  3757. echo " gpg --edit-key $MY_GPG_PUBLIC_KEY" >> /home/$MY_USERNAME/README
  3758. echo ' passwd' >> /home/$MY_USERNAME/README
  3759. echo ' save' >> /home/$MY_USERNAME/README
  3760. echo ' quit' >> /home/$MY_USERNAME/README
  3761. fi
  3762. if ! grep -q "Publish your GPG public key" /home/$MY_USERNAME/README; then
  3763. echo '' >> /home/$MY_USERNAME/README
  3764. echo '' >> /home/$MY_USERNAME/README
  3765. echo 'Publish your GPG public key' >> /home/$MY_USERNAME/README
  3766. echo '===========================' >> /home/$MY_USERNAME/README
  3767. echo 'So that others can send emails to you securely you should' >> /home/$MY_USERNAME/README
  3768. echo 'publish your GPG public key with the command:' >> /home/$MY_USERNAME/README
  3769. echo '' >> /home/$MY_USERNAME/README
  3770. echo " gpg --send-keys $MY_GPG_PUBLIC_KEY" >> /home/$MY_USERNAME/README
  3771. fi
  3772. fi
  3773. fi
  3774. echo 'configure_gpg' >> $COMPLETION_FILE
  3775. }
  3776. function encrypt_incoming_email {
  3777. # encrypts incoming mail using your GPG public key
  3778. # so even if an attacker gains access to the data at rest they still need
  3779. # to know your GPG key password to be able to read anything
  3780. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  3781. return
  3782. fi
  3783. if grep -Fxq "encrypt_incoming_email" $COMPLETION_FILE; then
  3784. return
  3785. fi
  3786. if [[ $GPG_ENCRYPT_STORED_EMAIL != "yes" ]]; then
  3787. return
  3788. fi
  3789. if [ ! -f /usr/bin/gpgit.pl ]; then
  3790. apt-get -y --force-yes install git libmail-gnupg-perl
  3791. cd $INSTALL_DIR
  3792. git clone https://github.com/mikecardwell/gpgit
  3793. cd gpgit
  3794. cp gpgit.pl /usr/bin
  3795. fi
  3796. # add a procmail rule
  3797. if ! grep -q "/usr/bin/gpgit.pl" /home/$MY_USERNAME/.procmailrc; then
  3798. echo '' >> /home/$MY_USERNAME/.procmailrc
  3799. echo ':0 f' >> /home/$MY_USERNAME/.procmailrc
  3800. echo "| /usr/bin/gpgit.pl $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/.procmailrc
  3801. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.procmailrc
  3802. fi
  3803. echo 'encrypt_incoming_email' >> $COMPLETION_FILE
  3804. }
  3805. function encrypt_outgoing_email {
  3806. # encrypts outgoing mail using your GPG public key
  3807. # so even if an attacker gains access to the data at rest they still need
  3808. # to know your GPG key password to be able to read sent mail
  3809. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  3810. return
  3811. fi
  3812. if grep -Fxq "encrypt_outgoing_email" $COMPLETION_FILE; then
  3813. return
  3814. fi
  3815. if [[ $GPG_ENCRYPT_STORED_EMAIL != "yes" ]]; then
  3816. return
  3817. fi
  3818. if [ ! -d /home/$MY_USERNAME/.gnupg ]; then
  3819. return
  3820. fi
  3821. if [ ! $MY_GPG_PUBLIC_KEY_ID ]; then
  3822. 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}')
  3823. if [ ! $MY_GPG_PUBLIC_KEY_ID ]; then
  3824. return
  3825. fi
  3826. fi
  3827. sed -i "s|#encrypt-to .*|hidden-encrypt-to $MY_GPG_PUBLIC_KEY_ID|g" /home/$MY_USERNAME/.gnupg/gpg.conf
  3828. echo 'encrypt_outgoing_email' >> $COMPLETION_FILE
  3829. }
  3830. function encrypt_all_email {
  3831. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  3832. return
  3833. fi
  3834. if grep -Fxq "encrypt_all_email" $COMPLETION_FILE; then
  3835. return
  3836. fi
  3837. if [[ $GPG_ENCRYPT_STORED_EMAIL != "yes" ]]; then
  3838. return
  3839. fi
  3840. echo '#!/bin/bash' > /usr/bin/encmaildir
  3841. echo '#' >> /usr/bin/encmaildir
  3842. echo '# GPLv2' >> /usr/bin/encmaildir
  3843. echo '# GPG Encrypt a Maildir using gpgit.pl' >> /usr/bin/encmaildir
  3844. echo '# Oct 03, 2014' >> /usr/bin/encmaildir
  3845. echo '#' >> /usr/bin/encmaildir
  3846. echo '# Change log:' >> /usr/bin/encmaildir
  3847. echo '# Sep 03, 2011' >> /usr/bin/encmaildir
  3848. echo '# - Temporary file is based on file_owner to avoid' >> /usr/bin/encmaildir
  3849. echo '# issues with permission differences.' >> /usr/bin/encmaildir
  3850. echo '# - Temporary file is removed after run.' >> /usr/bin/encmaildir
  3851. echo '# - Optional arguments passed to "find".' >> /usr/bin/encmaildir
  3852. echo '# - Full paths to binaries.' >> /usr/bin/encmaildir
  3853. echo '# - Removed unneccessary need of "cat", "grep", etc.' >> /usr/bin/encmaildir
  3854. echo '# Sep 04, 2011' >> /usr/bin/encmaildir
  3855. echo '# - Dont remove Dovecot index/uid unless messages' >> /usr/bin/encmaildir
  3856. echo '# have been GPG encrypted.' >> /usr/bin/encmaildir
  3857. echo '# - Adjust file tests to not just use -e' >> /usr/bin/encmaildir
  3858. echo '# - Quote all file operations' >> /usr/bin/encmaildir
  3859. echo '# Sep 05, 2011' >> /usr/bin/encmaildir
  3860. echo '# - Dont arbitrarily copy files, only overwrite the file' >> /usr/bin/encmaildir
  3861. echo '# in ~/Maildir if it differs after calling gpgencmail.pl' >> /usr/bin/encmaildir
  3862. echo '# - Only rebuild the index if we have modified ~/Maildir' >> /usr/bin/encmaildir
  3863. echo '# Oct 03, 2014' >> /usr/bin/encmaildir
  3864. echo '# - Minor modifications for use with Freedombone' >> /usr/bin/encmaildir
  3865. echo '' >> /usr/bin/encmaildir
  3866. echo 'if [[ -z "$1" || -z "$2" || -z "$3" ]]; then' >> /usr/bin/encmaildir
  3867. echo ' echo "Usage is ./encmaildir.sh {optional arguments passed to find for messages such as -mtime 0}"' >> /usr/bin/encmaildir
  3868. echo ' exit 0' >> /usr/bin/encmaildir
  3869. echo 'fi' >> /usr/bin/encmaildir
  3870. echo '' >> /usr/bin/encmaildir
  3871. echo 'MAIL_DIR=$1' >> /usr/bin/encmaildir
  3872. echo 'EMAIL_ADDRESS=$2' >> /usr/bin/encmaildir
  3873. echo 'USERNAME=$3' >> /usr/bin/encmaildir
  3874. echo 'if [ ! -d "$MAIL_DIR" ]; then' >> /usr/bin/encmaildir
  3875. echo " MAIL_DIR='/home/$MY_USERNAME/Maildir'" >> /usr/bin/encmaildir
  3876. echo 'fi' >> /usr/bin/encmaildir
  3877. echo '' >> /usr/bin/encmaildir
  3878. echo 'if [ ! $EMAIL_ADDRESS ]; then' >> /usr/bin/encmaildir
  3879. echo " EMAIL_ADDRESS='$MY_EMAIL_ADDRESS'" >> /usr/bin/encmaildir
  3880. echo 'fi' >> /usr/bin/encmaildir
  3881. echo '' >> /usr/bin/encmaildir
  3882. echo 'if [ ! $USERNAME ]; then' >> /usr/bin/encmaildir
  3883. echo " USERNAME='$MY_USERNAME'" >> /usr/bin/encmaildir
  3884. echo 'fi' >> /usr/bin/encmaildir
  3885. echo '' >> /usr/bin/encmaildir
  3886. echo '# Does this key exist?' >> /usr/bin/encmaildir
  3887. echo 'gpg --list-keys "$EMAIL_ADDRESS" > /dev/null 2>&1' >> /usr/bin/encmaildir
  3888. echo 'if [ $? -gt 0 ]; then' >> /usr/bin/encmaildir
  3889. echo ' echo "A GPG key for $EMAIL_ADDRESS could not be found!"' >> /usr/bin/encmaildir
  3890. echo ' exit 0' >> /usr/bin/encmaildir
  3891. echo 'fi' >> /usr/bin/encmaildir
  3892. echo '' >> /usr/bin/encmaildir
  3893. echo '# Find all files in the Maildir specified.' >> /usr/bin/encmaildir
  3894. echo 'echo "Calling find"' >> /usr/bin/encmaildir
  3895. echo -n 'find "$MAIL_DIR" -type f -regex ' >> /usr/bin/encmaildir
  3896. echo -n "'.*/\(cur\|new\)/.*' " >> /usr/bin/encmaildir
  3897. echo '$4|while read line; do' >> /usr/bin/encmaildir
  3898. echo ' gpgit.pl --encrypt-mode prefer-inline "$EMAIL_ADDRESS" "/tmp/msg_$USERNAME"' >> /usr/bin/encmaildir
  3899. echo '' >> /usr/bin/encmaildir
  3900. echo ' # Check to see if there are differences between the existing' >> /usr/bin/encmaildir
  3901. echo ' # Maildir file and what was created by gpgit.pl' >> /usr/bin/encmaildir
  3902. echo ' diff -qa "$line" "/tmp/msg_$USERNAME" > /dev/null 2>&1;' >> /usr/bin/encmaildir
  3903. echo ' if [ $? -gt 0 ]; then' >> /usr/bin/encmaildir
  3904. echo ' # Preserve timestamps, set ownership.' >> /usr/bin/encmaildir
  3905. echo ' chown $USERNAME:$USERNAME "/tmp/msg_$USERNAME"' >> /usr/bin/encmaildir
  3906. echo ' chmod 600 "/tmp/msg_$USERNAME"' >> /usr/bin/encmaildir
  3907. echo ' touch "/tmp/msg_$USERNAME" --reference="$line"' >> /usr/bin/encmaildir
  3908. echo '' >> /usr/bin/encmaildir
  3909. echo ' # Unlink the original Maildir message' >> /usr/bin/encmaildir
  3910. echo ' unlink "$line"' >> /usr/bin/encmaildir
  3911. echo '' >> /usr/bin/encmaildir
  3912. echo ' # Strip message sizes, retain experimental flags' >> /usr/bin/encmaildir
  3913. echo ' # and status flags, and copy the file over.' >> /usr/bin/encmaildir
  3914. echo ' STRIPSIZES=$(/bin/echo "$line"|/bin/sed -e "s/W=[[:digit:]]*//" -e "s/S=[[:digit:]]*//" -e "s/,,//" -e "s/,:2/:2/")' >> /usr/bin/encmaildir
  3915. echo ' cp -av "/tmp/msg_$USERNAME" "$STRIPSIZES"' >> /usr/bin/encmaildir
  3916. echo '' >> /usr/bin/encmaildir
  3917. echo ' #Indexes must be rebuilt, weve modified Maildir.' >> /usr/bin/encmaildir
  3918. echo ' touch "/tmp/rebuild_index_$USERNAME"' >> /usr/bin/encmaildir
  3919. echo ' else' >> /usr/bin/encmaildir
  3920. echo ' echo "Not copying, no differences between /tmp/msg_$USERNAME and $line"' >> /usr/bin/encmaildir
  3921. echo ' fi' >> /usr/bin/encmaildir
  3922. echo '' >> /usr/bin/encmaildir
  3923. echo ' # Remove the temporary file' >> /usr/bin/encmaildir
  3924. echo ' unlink "/tmp/msg_$USERNAME"' >> /usr/bin/encmaildir
  3925. echo 'done' >> /usr/bin/encmaildir
  3926. echo '' >> /usr/bin/encmaildir
  3927. echo '# Remove Dovecot index and uids for regeneration.' >> /usr/bin/encmaildir
  3928. echo 'if [ -f "/tmp/rebuild_index_$USERNAME" ]; then' >> /usr/bin/encmaildir
  3929. echo ' echo "Removing Dovecot indexes and uids"' >> /usr/bin/encmaildir
  3930. echo -n ' find "$MAIL_DIR" -type f -regex ' >> /usr/bin/encmaildir
  3931. echo "'.*\(dovecot-\|dovecot\.\|\.uidvalidity\).*' -delete" >> /usr/bin/encmaildir
  3932. echo '' >> /usr/bin/encmaildir
  3933. echo ' # Remove the temporary file' >> /usr/bin/encmaildir
  3934. echo ' unlink "/tmp/rebuild_index_$USERNAME"' >> /usr/bin/encmaildir
  3935. echo 'else' >> /usr/bin/encmaildir
  3936. echo ' echo "No messages found needing GPG encryption, not' >> /usr/bin/encmaildir
  3937. echo ' echo "removing Dovecot indexes and UIDs."' >> /usr/bin/encmaildir
  3938. echo 'fi' >> /usr/bin/encmaildir
  3939. echo 'exit 0' >> /usr/bin/encmaildir
  3940. chmod +x /usr/bin/encmaildir
  3941. if [ ! /home/$MY_USERNAME/README ]; then
  3942. touch /home/$MY_USERNAME/README
  3943. fi
  3944. if ! grep -q "If you have imported legacy email" /home/$MY_USERNAME/README; then
  3945. echo '' >> /home/$MY_USERNAME/README
  3946. echo '' >> /home/$MY_USERNAME/README
  3947. echo 'Encrypting legacy email' >> /home/$MY_USERNAME/README
  3948. echo '=======================' >> /home/$MY_USERNAME/README
  3949. echo 'If you have imported legacy email which is not encrypted' >> /home/$MY_USERNAME/README
  3950. echo 'then it can be encrypted with the command:' >> /home/$MY_USERNAME/README
  3951. echo '' >> /home/$MY_USERNAME/README
  3952. echo ' encmaildir' >> /home/$MY_USERNAME/README
  3953. echo '' >> /home/$MY_USERNAME/README
  3954. echo 'But be warned that depending upon how much email you have' >> /home/$MY_USERNAME/README
  3955. echo 'this could take a seriously LONG time on the Beaglebone' >> /home/$MY_USERNAME/README
  3956. echo 'and may be better done on a faster machine.' >> /home/$MY_USERNAME/README
  3957. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  3958. fi
  3959. echo 'encrypt_all_email' >> $COMPLETION_FILE
  3960. }
  3961. function email_client {
  3962. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  3963. return
  3964. fi
  3965. if grep -Fxq "email_client" $COMPLETION_FILE; then
  3966. return
  3967. fi
  3968. apt-get -y --force-yes install mutt-patched lynx abook
  3969. if [ ! -f /etc/Muttrc ]; then
  3970. echo "ERROR: Mutt does not appear to have installed. $CHECK_MESSAGE"
  3971. exit 49
  3972. fi
  3973. if [ ! -d /home/$MY_USERNAME/.mutt ]; then
  3974. mkdir /home/$MY_USERNAME/.mutt
  3975. fi
  3976. echo "text/html; lynx -dump -width=78 -nolist %s | sed ‘s/^ //’; copiousoutput; needsterminal; nametemplate=%s.html" > /home/$MY_USERNAME/.mutt/mailcap
  3977. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.mutt
  3978. echo 'set mbox_type=Maildir' >> /etc/Muttrc
  3979. echo 'set folder="~/Maildir"' >> /etc/Muttrc
  3980. echo 'set mask="!^\\.[^.]"' >> /etc/Muttrc
  3981. echo 'set mbox="~/Maildir"' >> /etc/Muttrc
  3982. echo 'set record="+Sent"' >> /etc/Muttrc
  3983. echo 'set postponed="+Drafts"' >> /etc/Muttrc
  3984. echo 'set trash="+Trash"' >> /etc/Muttrc
  3985. echo 'set spoolfile="~/Maildir"' >> /etc/Muttrc
  3986. echo 'auto_view text/x-vcard text/html text/enriched' >> /etc/Muttrc
  3987. echo 'set editor="emacs"' >> /etc/Muttrc
  3988. echo 'set header_cache="+.cache"' >> /etc/Muttrc
  3989. echo '' >> /etc/Muttrc
  3990. echo 'macro index S "<tag-prefix><save-message>=.learn-spam<enter>" "move to learn-spam"' >> /etc/Muttrc
  3991. echo 'macro pager S "<save-message>=.learn-spam<enter>" "move to learn-spam"' >> /etc/Muttrc
  3992. echo 'macro index H "<tag-prefix><copy-message>=.learn-ham<enter>" "copy to learn-ham"' >> /etc/Muttrc
  3993. echo 'macro pager H "<copy-message>=.learn-ham<enter>" "copy to learn-ham"' >> /etc/Muttrc
  3994. echo '' >> /etc/Muttrc
  3995. echo '# set up the sidebar' >> /etc/Muttrc
  3996. echo 'set sidebar_width=12' >> /etc/Muttrc
  3997. echo 'set sidebar_visible=yes' >> /etc/Muttrc
  3998. echo "set sidebar_delim='|'" >> /etc/Muttrc
  3999. echo 'set sidebar_sort=yes' >> /etc/Muttrc
  4000. echo '' >> /etc/Muttrc
  4001. echo 'set rfc2047_parameters' >> /etc/Muttrc
  4002. echo '' >> /etc/Muttrc
  4003. echo '# Show inbox and sent items' >> /etc/Muttrc
  4004. echo 'mailboxes = =Sent' >> /etc/Muttrc
  4005. echo '' >> /etc/Muttrc
  4006. echo '# Alter these colours as needed for maximum bling' >> /etc/Muttrc
  4007. echo 'color sidebar_new yellow default' >> /etc/Muttrc
  4008. echo 'color normal white default' >> /etc/Muttrc
  4009. echo 'color hdrdefault brightcyan default' >> /etc/Muttrc
  4010. echo 'color signature green default' >> /etc/Muttrc
  4011. echo 'color attachment brightyellow default' >> /etc/Muttrc
  4012. echo 'color quoted green default' >> /etc/Muttrc
  4013. echo 'color quoted1 white default' >> /etc/Muttrc
  4014. echo 'color tilde blue default' >> /etc/Muttrc
  4015. echo '' >> /etc/Muttrc
  4016. echo '# ctrl-n, ctrl-p to select next, prev folder' >> /etc/Muttrc
  4017. echo '# ctrl-o to open selected folder' >> /etc/Muttrc
  4018. echo 'bind index \Cp sidebar-prev' >> /etc/Muttrc
  4019. echo 'bind index \Cn sidebar-next' >> /etc/Muttrc
  4020. echo 'bind index \Co sidebar-open' >> /etc/Muttrc
  4021. echo 'bind pager \Cp sidebar-prev' >> /etc/Muttrc
  4022. echo 'bind pager \Cn sidebar-next' >> /etc/Muttrc
  4023. echo 'bind pager \Co sidebar-open' >> /etc/Muttrc
  4024. echo '' >> /etc/Muttrc
  4025. echo '# ctrl-b toggles sidebar visibility' >> /etc/Muttrc
  4026. echo "macro index,pager \Cb '<enter-command>toggle sidebar_visible<enter><redraw-screen>' 'toggle sidebar'" >> /etc/Muttrc
  4027. echo '' >> /etc/Muttrc
  4028. echo '# esc-m Mark new messages as read' >> /etc/Muttrc
  4029. echo 'macro index <esc>m "T~N<enter>;WNT~O<enter>;WO\CT~T<enter>" "mark all messages read"' >> /etc/Muttrc
  4030. echo '' >> /etc/Muttrc
  4031. echo '# Collapsing threads' >> /etc/Muttrc
  4032. echo 'macro index [ "<collapse-thread>" "collapse/uncollapse thread"' >> /etc/Muttrc
  4033. echo 'macro index ] "<collapse-all>" "collapse/uncollapse all threads"' >> /etc/Muttrc
  4034. echo '' >> /etc/Muttrc
  4035. echo '# threads containing new messages' >> /etc/Muttrc
  4036. echo 'uncolor index "~(~N)"' >> /etc/Muttrc
  4037. echo 'color index brightblue default "~(~N)"' >> /etc/Muttrc
  4038. echo '' >> /etc/Muttrc
  4039. echo '# new messages themselves' >> /etc/Muttrc
  4040. echo 'uncolor index "~N"' >> /etc/Muttrc
  4041. echo 'color index brightyellow default "~N"' >> /etc/Muttrc
  4042. echo '' >> /etc/Muttrc
  4043. echo '# GPG/PGP integration' >> /etc/Muttrc
  4044. echo '# this set the number of seconds to keep in memory the passphrase used to encrypt/sign' >> /etc/Muttrc
  4045. echo 'set pgp_timeout=1800' >> /etc/Muttrc
  4046. echo '' >> /etc/Muttrc
  4047. echo '# automatically sign and encrypt with PGP/MIME' >> /etc/Muttrc
  4048. echo 'set pgp_autosign # autosign all outgoing mails' >> /etc/Muttrc
  4049. echo 'set pgp_autoencrypt # Try to encrypt automatically' >> /etc/Muttrc
  4050. echo 'set pgp_replyencrypt # autocrypt replies to crypted' >> /etc/Muttrc
  4051. echo 'set pgp_replysign # autosign replies to signed' >> /etc/Muttrc
  4052. echo 'set pgp_auto_decode=yes # decode attachments' >> /etc/Muttrc
  4053. echo 'set fcc_clear # Keep cleartext copy of sent encrypted mail' >> /etc/Muttrc
  4054. echo 'unset smime_is_default' >> /etc/Muttrc
  4055. echo '' >> /etc/Muttrc
  4056. echo 'set alias_file=~/.mutt-alias' >> /etc/Muttrc
  4057. echo 'source ~/.mutt-alias' >> /etc/Muttrc
  4058. echo 'set query_command= "abook --mutt-query \"%s\""' >> /etc/Muttrc
  4059. echo 'macro index,pager A "<pipe-message>abook --add-email-quiet<return>" "add the sender address to abook"' >> /etc/Muttrc
  4060. cp -f /etc/Muttrc /home/$MY_USERNAME/.muttrc
  4061. touch /home/$MY_USERNAME/.mutt-alias
  4062. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.muttrc
  4063. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.mutt-alias
  4064. echo 'email_client' >> $COMPLETION_FILE
  4065. }
  4066. function folders_for_mailing_lists {
  4067. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  4068. return
  4069. fi
  4070. if grep -Fxq "folders_for_mailing_lists" $COMPLETION_FILE; then
  4071. return
  4072. fi
  4073. echo '#!/bin/bash' > /usr/bin/addmailinglist
  4074. echo 'MYUSERNAME=$1' >> /usr/bin/addmailinglist
  4075. echo 'MAILINGLIST=$2' >> /usr/bin/addmailinglist
  4076. echo 'SUBJECTTAG=$3' >> /usr/bin/addmailinglist
  4077. echo 'MUTTRC=/home/$MYUSERNAME/.muttrc' >> /usr/bin/addmailinglist
  4078. echo 'PM=/home/$MYUSERNAME/.procmailrc' >> /usr/bin/addmailinglist
  4079. echo 'LISTDIR=/home/$MYUSERNAME/Maildir/$MAILINGLIST' >> /usr/bin/addmailinglist
  4080. echo '' >> /usr/bin/addmailinglist
  4081. echo '# Exit if the list was already added' >> /usr/bin/addmailinglist
  4082. echo 'if grep -q "=$MAILINGLIST" $MUTTRC; then' >> /usr/bin/addmailinglist
  4083. echo ' exit 1' >> /usr/bin/addmailinglist
  4084. echo 'fi' >> /usr/bin/addmailinglist
  4085. echo '' >> /usr/bin/addmailinglist
  4086. echo 'if ! [[ $MYUSERNAME && $MAILINGLIST && $SUBJECTTAG ]]; then' >> /usr/bin/addmailinglist
  4087. echo ' echo "addmailinglist [user name] [mailing list name] [subject tag]"' >> /usr/bin/addmailinglist
  4088. echo ' exit 1' >> /usr/bin/addmailinglist
  4089. echo 'fi' >> /usr/bin/addmailinglist
  4090. echo '' >> /usr/bin/addmailinglist
  4091. echo 'if [ ! -d "$LISTDIR" ]; then' >> /usr/bin/addmailinglist
  4092. echo ' mkdir -m 700 $LISTDIR' >> /usr/bin/addmailinglist
  4093. echo ' mkdir -m 700 $LISTDIR/tmp' >> /usr/bin/addmailinglist
  4094. echo ' mkdir -m 700 $LISTDIR/new' >> /usr/bin/addmailinglist
  4095. echo ' mkdir -m 700 $LISTDIR/cur' >> /usr/bin/addmailinglist
  4096. echo 'fi' >> /usr/bin/addmailinglist
  4097. echo '' >> /usr/bin/addmailinglist
  4098. echo 'chown -R $MYUSERNAME:$MYUSERNAME $LISTDIR' >> /usr/bin/addmailinglist
  4099. echo 'echo "" >> $PM' >> /usr/bin/addmailinglist
  4100. echo 'echo ":0" >> $PM' >> /usr/bin/addmailinglist
  4101. echo 'echo " * ^Subject:.*()\[$SUBJECTTAG\]" >> $PM' >> /usr/bin/addmailinglist
  4102. echo 'echo "$LISTDIR/new" >> $PM' >> /usr/bin/addmailinglist
  4103. echo 'chown $MYUSERNAME:$MYUSERNAME $PM' >> /usr/bin/addmailinglist
  4104. echo '' >> /usr/bin/addmailinglist
  4105. echo 'if [ ! -f "$MUTTRC" ]; then' >> /usr/bin/addmailinglist
  4106. echo ' cp /etc/Muttrc $MUTTRC' >> /usr/bin/addmailinglist
  4107. echo ' chown $MYUSERNAME:$MYUSERNAME $MUTTRC' >> /usr/bin/addmailinglist
  4108. echo 'fi' >> /usr/bin/addmailinglist
  4109. echo '' >> /usr/bin/addmailinglist
  4110. echo 'PROCMAILLOG=/home/$MYUSERNAME/log' >> /usr/bin/addmailinglist
  4111. echo 'if [ ! -d $PROCMAILLOG ]; then' >> /usr/bin/addmailinglist
  4112. echo ' mkdir $PROCMAILLOG' >> /usr/bin/addmailinglist
  4113. echo ' chown -R $MYUSERNAME:$MYUSERNAME $PROCMAILLOG' >> /usr/bin/addmailinglist
  4114. echo 'fi' >> /usr/bin/addmailinglist
  4115. echo '' >> /usr/bin/addmailinglist
  4116. echo 'MUTT_MAILBOXES=$(grep "mailboxes =" $MUTTRC)' >> /usr/bin/addmailinglist
  4117. echo 'if [[ $MUTT_MAILBOXES != *$MAILINGLIST* ]]; then' >> /usr/bin/addmailinglist
  4118. echo ' sed -i "s|$MUTT_MAILBOXES|$MUTT_MAILBOXES =$MAILINGLIST|g" $MUTTRC' >> /usr/bin/addmailinglist
  4119. echo ' chown $MYUSERNAME:$MYUSERNAME $MUTTRC' >> /usr/bin/addmailinglist
  4120. echo 'fi' >> /usr/bin/addmailinglist
  4121. echo 'exit 0' >> /usr/bin/addmailinglist
  4122. chmod +x /usr/bin/addmailinglist
  4123. echo 'folders_for_mailing_lists' >> $COMPLETION_FILE
  4124. }
  4125. # Ensure that the from field is correct when sending email from Mutt
  4126. function email_from_address {
  4127. if grep -Fxq "email_from_address" $COMPLETION_FILE; then
  4128. return
  4129. fi
  4130. if [ ! -f /home/$MY_USERNAME/.muttrc ]; then
  4131. return
  4132. fi
  4133. if grep -q "set from=" /home/$MY_USERNAME/.muttrc; then
  4134. sed -i "s|set from=.*|set from='$MY_NAME <$MY_EMAIL_ADDRESS>'|g" /home/$MY_USERNAME/.muttrc
  4135. else
  4136. echo "set from='$MY_NAME <$MY_EMAIL_ADDRESS>'" >> /home/$MY_USERNAME/.muttrc
  4137. fi
  4138. echo 'email_from_address' >> $COMPLETION_FILE
  4139. }
  4140. function folders_for_email_addresses {
  4141. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  4142. return
  4143. fi
  4144. if grep -Fxq "folders_for_email_addresses" $COMPLETION_FILE; then
  4145. return
  4146. fi
  4147. echo '#!/bin/bash' > /usr/bin/addemailtofolder
  4148. echo 'MYUSERNAME=$1' >> /usr/bin/addemailtofolder
  4149. echo 'EMAILADDRESS=$2' >> /usr/bin/addemailtofolder
  4150. echo 'MAILINGLIST=$3' >> /usr/bin/addemailtofolder
  4151. echo 'MUTTRC=/home/$MYUSERNAME/.muttrc' >> /usr/bin/addemailtofolder
  4152. echo 'PM=/home/$MYUSERNAME/.procmailrc' >> /usr/bin/addemailtofolder
  4153. echo 'LISTDIR=/home/$MYUSERNAME/Maildir/$MAILINGLIST' >> /usr/bin/addemailtofolder
  4154. echo '' >> /usr/bin/addemailtofolder
  4155. echo 'if ! [[ $MYUSERNAME && $EMAILADDRESS && $MAILINGLIST ]]; then' >> /usr/bin/addemailtofolder
  4156. echo ' echo "addemailtofolder [user name] [email address] [mailing list name]"' >> /usr/bin/addemailtofolder
  4157. echo ' exit 1' >> /usr/bin/addemailtofolder
  4158. echo 'fi' >> /usr/bin/addemailtofolder
  4159. echo '' >> /usr/bin/addemailtofolder
  4160. echo 'if [ ! -d "$LISTDIR" ]; then' >> /usr/bin/addemailtofolder
  4161. echo ' mkdir -m 700 $LISTDIR' >> /usr/bin/addemailtofolder
  4162. echo ' mkdir -m 700 $LISTDIR/tmp' >> /usr/bin/addemailtofolder
  4163. echo ' mkdir -m 700 $LISTDIR/new' >> /usr/bin/addemailtofolder
  4164. echo ' mkdir -m 700 $LISTDIR/cur' >> /usr/bin/addemailtofolder
  4165. echo 'fi' >> /usr/bin/addemailtofolder
  4166. echo 'chown -R $MYUSERNAME:$MYUSERNAME $LISTDIR' >> /usr/bin/addemailtofolder
  4167. echo 'echo "" >> $PM' >> /usr/bin/addemailtofolder
  4168. echo 'echo ":0" >> $PM' >> /usr/bin/addemailtofolder
  4169. echo 'echo " * ^From: $EMAILADDRESS" >> $PM' >> /usr/bin/addemailtofolder
  4170. echo 'echo "$LISTDIR/new" >> $PM' >> /usr/bin/addemailtofolder
  4171. echo 'chown $MYUSERNAME:$MYUSERNAME $PM' >> /usr/bin/addemailtofolder
  4172. echo 'if [ ! -f "$MUTTRC" ]; then' >> /usr/bin/addemailtofolder
  4173. echo ' cp /etc/Muttrc $MUTTRC' >> /usr/bin/addemailtofolder
  4174. echo ' chown $MYUSERNAME:$MYUSERNAME $MUTTRC' >> /usr/bin/addemailtofolder
  4175. echo 'fi' >> /usr/bin/addemailtofolder
  4176. echo 'PROCMAILLOG=/home/$MYUSERNAME/log' >> /usr/bin/addemailtofolder
  4177. echo 'if [ ! -d $PROCMAILLOG ]; then' >> /usr/bin/addemailtofolder
  4178. echo ' mkdir $PROCMAILLOG' >> /usr/bin/addemailtofolder
  4179. echo ' chown -R $MYUSERNAME:$MYUSERNAME $PROCMAILLOG' >> /usr/bin/addemailtofolder
  4180. echo 'fi' >> /usr/bin/addemailtofolder
  4181. echo 'MUTT_MAILBOXES=$(grep "mailboxes =" $MUTTRC)' >> /usr/bin/addemailtofolder
  4182. echo 'if [[ $MUTT_MAILBOXES != *$MAILINGLIST* ]]; then' >> /usr/bin/addemailtofolder
  4183. echo ' if ! grep -q "=$MAILINGLIST" $MUTTRC; then' >> /usr/bin/addemailtofolder
  4184. echo ' sed -i "s|$MUTT_MAILBOXES|$MUTT_MAILBOXES =$MAILINGLIST|g" $MUTTRC' >> /usr/bin/addemailtofolder
  4185. echo ' chown $MYUSERNAME:$MYUSERNAME $MUTTRC' >> /usr/bin/addemailtofolder
  4186. echo ' fi' >> /usr/bin/addemailtofolder
  4187. echo 'fi' >> /usr/bin/addemailtofolder
  4188. echo 'exit 0' >> /usr/bin/addemailtofolder
  4189. chmod +x /usr/bin/addemailtofolder
  4190. echo 'folders_for_email_addresses' >> $COMPLETION_FILE
  4191. }
  4192. function dynamic_dns_freedns {
  4193. if grep -Fxq "dynamic_dns_freedns" $COMPLETION_FILE; then
  4194. return
  4195. fi
  4196. echo '#!/bin/bash' > /usr/bin/dynamicdns
  4197. echo '# subdomain name 1' >> /usr/bin/dynamicdns
  4198. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  4199. echo '# add any other subdomains below' >> /usr/bin/dynamicdns
  4200. chmod 600 /usr/bin/dynamicdns
  4201. chmod +x /usr/bin/dynamicdns
  4202. if ! grep -q "dynamicdns" /etc/crontab; then
  4203. echo '*/5 * * * * root /usr/bin/timeout 240 /usr/bin/dynamicdns' >> /etc/crontab
  4204. fi
  4205. service cron restart
  4206. echo 'dynamic_dns_freedns' >> $COMPLETION_FILE
  4207. }
  4208. function create_public_mailing_list {
  4209. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  4210. return
  4211. fi
  4212. if grep -Fxq "create_public_mailing_list" $COMPLETION_FILE; then
  4213. return
  4214. fi
  4215. if [ ! $PUBLIC_MAILING_LIST ]; then
  4216. return
  4217. fi
  4218. # does the mailing list have a separate domain name?
  4219. if [ ! $PUBLIC_MAILING_LIST_DOMAIN_NAME ]; then
  4220. PUBLIC_MAILING_LIST_DOMAIN_NAME=$DOMAIN_NAME
  4221. fi
  4222. PUBLIC_MAILING_LIST_USER="mlmmj"
  4223. apt-get -y --force-yes install mlmmj
  4224. adduser --system $PUBLIC_MAILING_LIST_USER
  4225. addgroup $PUBLIC_MAILING_LIST_USER
  4226. adduser $PUBLIC_MAILING_LIST_USER $PUBLIC_MAILING_LIST_USER
  4227. echo ''
  4228. echo "Creating the $PUBLIC_MAILING_LIST mailing list"
  4229. echo ''
  4230. # create the list
  4231. mlmmj-make-ml -a -L "$PUBLIC_MAILING_LIST" -c $PUBLIC_MAILING_LIST_USER
  4232. echo 'SYSTEM_ALIASES_PIPE_TRANSPORT = address_pipe' > /etc/exim4/conf.d/main/000_localmacros
  4233. echo "SYSTEM_ALIASES_USER = $PUBLIC_MAILING_LIST_USER" >> /etc/exim4/conf.d/main/000_localmacros
  4234. echo "SYSTEM_ALIASES_GROUP = $PUBLIC_MAILING_LIST_USER" >> /etc/exim4/conf.d/main/000_localmacros
  4235. # router
  4236. echo 'mlmmj_router:' > /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  4237. echo ' debug_print = "R: mlmmj_router for $local_part@$domain"' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  4238. echo ' driver = accept' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  4239. echo ' domains = +mlmmj_domains' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  4240. echo ' #require_files = MLMMJ_HOME/${lc::$local_part}' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  4241. 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
  4242. echo ' # Exim will then spawn a new process running under the UID of "mlmmj".' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  4243. echo ' require_files = mlmmj:MLMMJ_HOME/${lc::$local_part}' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  4244. echo ' local_part_suffix = +*' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  4245. echo ' local_part_suffix_optional' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  4246. echo ' headers_remove = Delivered-To' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  4247. echo ' headers_add = Delivered-To: $local_part$local_part_suffix@$domain' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  4248. echo ' transport = mlmmj_transport' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  4249. # transport
  4250. echo 'mlmmj_transport:' > /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  4251. echo ' debug_print = "T: mlmmj_transport for $local_part@$domain"' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  4252. echo ' driver = pipe' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  4253. echo ' return_path_add' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  4254. echo ' user = mlmmj' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  4255. echo ' group = mlmmj' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  4256. echo ' home_directory = MLMMJ_HOME' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  4257. echo ' current_directory = MLMMJ_HOME' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  4258. echo ' command = /usr/bin/mlmmj-receive -F -L MLMMJ_HOME/${lc:$local_part}' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  4259. if ! grep -q "MLMMJ_HOME=/var/spool/mlmmj" /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs; then
  4260. sed -i '/MAIN CONFIGURATION SETTINGS/a\MLMMJ_HOME=/var/spool/mlmmj' /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs
  4261. fi
  4262. if ! grep -q "domainlist mlmmj_domains =" /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs; then
  4263. sed -i "/MLMMJ_HOME/a\domainlist mlmmj_domains = $PUBLIC_MAILING_LIST_DOMAIN_NAME" /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs
  4264. fi
  4265. if ! grep -q "delay_warning_condition =" /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs; then
  4266. 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
  4267. fi
  4268. if ! grep -q ": +mlmmj_domains" /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs; then
  4269. 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
  4270. fi
  4271. if ! grep -q "! +mlmmj_domains" /etc/exim4/conf.d/router/200_exim4-config_primary; then
  4272. sed -i 's/domains = ! +local_domains/domains = ! +mlmmj_domains : ! +local_domains/g' /etc/exim4/conf.d/router/200_exim4-config_primary
  4273. fi
  4274. newaliases
  4275. update-exim4.conf.template -r
  4276. update-exim4.conf
  4277. service exim4 restart
  4278. if ! grep -q "$PUBLIC_MAILING_LIST mailing list" /home/$MY_USERNAME/README; then
  4279. echo '' >> /home/$MY_USERNAME/README
  4280. echo '' >> /home/$MY_USERNAME/README
  4281. echo 'Public mailing list' >> /home/$MY_USERNAME/README
  4282. echo '===================' >> /home/$MY_USERNAME/README
  4283. echo "To subscribe to the $PUBLIC_MAILING_LIST mailing list send a" >> /home/$MY_USERNAME/README
  4284. echo "cleartext email to $PUBLIC_MAILING_LIST+subscribe@$DOMAIN_NAME" >> /home/$MY_USERNAME/README
  4285. fi
  4286. addmailinglist $MY_USERNAME "$PUBLIC_MAILING_LIST" "$PUBLIC_MAILING_LIST"
  4287. echo 'create_public_mailing_list' >> $COMPLETION_FILE
  4288. }
  4289. function create_private_mailing_list {
  4290. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  4291. return
  4292. fi
  4293. # This installation doesn't work, results in ruby errors
  4294. # There is currently no schleuder package for Debian jessie
  4295. if grep -Fxq "create_private_mailing_list" $COMPLETION_FILE; then
  4296. return
  4297. fi
  4298. if [ ! $PRIVATE_MAILING_LIST ]; then
  4299. return
  4300. fi
  4301. if [[ $PRIVATE_MAILING_LIST == $MY_USERNAME ]]; then
  4302. echo 'The name of the private mailing list should not be the'
  4303. echo 'same as your username'
  4304. exit 10
  4305. fi
  4306. if [ ! $MY_GPG_PUBLIC_KEY ]; then
  4307. echo 'To create a private mailing list you need to specify a file'
  4308. echo 'containing your exported GPG key within MY_GPG_PUBLIC_KEY at'
  4309. echo 'the top of the script'
  4310. exit 11
  4311. fi
  4312. apt-get -y --force-yes install ruby ruby-dev ruby-gpgme libgpgme11-dev libmagic-dev
  4313. gem install schleuder
  4314. schleuder-fix-gem-dependencies
  4315. schleuder-init-setup --gem
  4316. # NOTE: this is version number sensitive and so might need changing
  4317. ln -s /var/lib/gems/2.1.0/gems/schleuder-2.2.4 /var/lib/schleuder
  4318. sed -i 's/#smtp_port: 25/smtp_port: 465/g' /etc/schleuder/schleuder.conf
  4319. sed -i 's/#superadminaddr: root@localhost/superadminaddr: root@localhost' /etc/schleuder/schleuder.conf
  4320. 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
  4321. addemailtofolder $MY_USERNAME $PRIVATE_MAILING_LIST@$DOMAIN_NAME $PRIVATE_MAILING_LIST
  4322. echo 'schleuder:' > /etc/exim4/conf.d/router/550_exim4-config_schleuder
  4323. echo ' debug_print = "R: schleuder for $local_part@$domain"' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  4324. echo ' driver = accept' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  4325. echo ' local_part_suffix_optional' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  4326. echo ' local_part_suffix = +* : -bounce : -sendkey' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  4327. echo ' domains = +local_domains' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  4328. echo ' user = schleuder' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  4329. echo ' group = schleuder' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  4330. echo ' require_files = schleuder:+/var/lib/schleuder/$domain/${local_part}' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  4331. echo ' transport = schleuder_transport' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  4332. echo 'schleuder_transport:' > /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  4333. echo ' debug_print = "T: schleuder_transport for $local_part@$domain"' >> /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  4334. echo ' driver = pipe' >> /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  4335. echo ' home_directory = "/var/lib/schleuder/$domain/$local_part"' >> /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  4336. echo ' command = "/usr/bin/schleuder $local_part@$domain"' >> /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  4337. chown -R schleuder:schleuder /var/lib/schleuder
  4338. update-exim4.conf.template -r
  4339. update-exim4.conf
  4340. service exim4 restart
  4341. useradd -d /var/schleuderlists -s /bin/false schleuder
  4342. adduser Debian-exim schleuder
  4343. usermod -a -G mail schleuder
  4344. #exim -d -bt $PRIVATE_MAILING_LIST@$DOMAIN_NAME
  4345. echo 'create_private_mailing_list' >> $COMPLETION_FILE
  4346. }
  4347. function import_email {
  4348. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  4349. return
  4350. fi
  4351. EMAIL_COMPLETE_MSG=' *** Freedombone mailbox installation is complete ***'
  4352. if grep -Fxq "import_email" $COMPLETION_FILE; then
  4353. if [[ $SYSTEM_TYPE == "$VARIANT_MAILBOX" ]]; then
  4354. create_backup_script
  4355. create_restore_script
  4356. backup_to_friends_servers
  4357. intrusion_detection
  4358. echo ''
  4359. echo "$EMAIL_COMPLETE_MSG"
  4360. if [ -d $USB_MOUNT ]; then
  4361. umount $USB_MOUNT
  4362. rm -rf $USB_MOUNT
  4363. echo ' You can now remove the USB drive'
  4364. fi
  4365. exit 0
  4366. fi
  4367. return
  4368. fi
  4369. if [ $IMPORT_MAILDIR ]; then
  4370. if [ -d $IMPORT_MAILDIR ]; then
  4371. echo 'Transfering email files'
  4372. cp -r $IMPORT_MAILDIR /home/$MY_USERNAME
  4373. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Maildir
  4374. else
  4375. echo "Email import directory $IMPORT_MAILDIR not found"
  4376. exit 9
  4377. fi
  4378. fi
  4379. echo 'import_email' >> $COMPLETION_FILE
  4380. if [[ $SYSTEM_TYPE == "$VARIANT_MAILBOX" ]]; then
  4381. create_backup_script
  4382. create_restore_script
  4383. backup_to_friends_servers
  4384. intrusion_detection
  4385. # unmount any attached usb drive
  4386. echo ''
  4387. echo "$EMAIL_COMPLETE_MSG"
  4388. echo ''
  4389. if [ -d $USB_MOUNT ]; then
  4390. umount $USB_MOUNT
  4391. rm -rf $USB_MOUNT
  4392. echo ' You can now remove the USB drive'
  4393. fi
  4394. exit 0
  4395. fi
  4396. }
  4397. function install_web_server {
  4398. if [[ $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  4399. return
  4400. fi
  4401. if grep -Fxq "install_web_server" $COMPLETION_FILE; then
  4402. return
  4403. fi
  4404. # remove apache
  4405. apt-get -y remove --purge apache2
  4406. if [ -d /etc/apache2 ]; then
  4407. rm -rf /etc/apache2
  4408. fi
  4409. # install nginx
  4410. apt-get -y --force-yes install nginx php5-fpm git
  4411. # limit the number of php processes
  4412. sed -i 's/; process.max = 128/process.max = 32/g' /etc/php5/fpm/php-fpm.conf
  4413. sed -i 's/;process_control_timeout = 0/process_control_timeout = 300/g' /etc/php5/fpm/php-fpm.conf
  4414. if ! grep -q "pm.max_children" /etc/php5/fpm/php-fpm.conf; then
  4415. echo 'pm.max_children = 10' >> /etc/php5/fpm/php-fpm.conf
  4416. echo 'pm.start_servers = 2' >> /etc/php5/fpm/php-fpm.conf
  4417. echo 'pm.min_spare_servers = 2' >> /etc/php5/fpm/php-fpm.conf
  4418. echo 'pm.max_spare_servers = 5' >> /etc/php5/fpm/php-fpm.conf
  4419. echo 'pm.max_requests = 50' >> /etc/php5/fpm/php-fpm.conf
  4420. fi
  4421. if [ ! -d /etc/nginx ]; then
  4422. echo "ERROR: nginx does not appear to have installed. $CHECK_MESSAGE"
  4423. exit 51
  4424. fi
  4425. # Nginx settings
  4426. echo 'user www-data;' > /etc/nginx/nginx.conf
  4427. #echo "worker_processes; $CPU_CORES" >> /etc/nginx/nginx.conf
  4428. echo 'pid /run/nginx.pid;' >> /etc/nginx/nginx.conf
  4429. echo '' >> /etc/nginx/nginx.conf
  4430. echo 'events {' >> /etc/nginx/nginx.conf
  4431. echo ' worker_connections 50;' >> /etc/nginx/nginx.conf
  4432. echo ' # multi_accept on;' >> /etc/nginx/nginx.conf
  4433. echo '}' >> /etc/nginx/nginx.conf
  4434. echo '' >> /etc/nginx/nginx.conf
  4435. echo 'http {' >> /etc/nginx/nginx.conf
  4436. echo ' # limit the number of connections per single IP' >> /etc/nginx/nginx.conf
  4437. echo ' limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;' >> /etc/nginx/nginx.conf
  4438. echo '' >> /etc/nginx/nginx.conf
  4439. echo ' # limit the number of requests for a given session' >> /etc/nginx/nginx.conf
  4440. echo ' # Note that the Owncloud web interface seems to require a rate of around 140r/s' >> /etc/nginx/nginx.conf
  4441. echo ' limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=140r/s;' >> /etc/nginx/nginx.conf
  4442. echo '' >> /etc/nginx/nginx.conf
  4443. 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
  4444. echo ' client_body_buffer_size 128k;' >> /etc/nginx/nginx.conf
  4445. echo '' >> /etc/nginx/nginx.conf
  4446. echo ' # headerbuffer size for the request header from client, its set for testing purpose' >> /etc/nginx/nginx.conf
  4447. echo ' client_header_buffer_size 3m;' >> /etc/nginx/nginx.conf
  4448. echo '' >> /etc/nginx/nginx.conf
  4449. echo ' # maximum number and size of buffers for large headers to read from client request' >> /etc/nginx/nginx.conf
  4450. echo ' large_client_header_buffers 4 256k;' >> /etc/nginx/nginx.conf
  4451. echo '' >> /etc/nginx/nginx.conf
  4452. echo ' # read timeout for the request body from client, its set for testing purpose' >> /etc/nginx/nginx.conf
  4453. echo ' client_body_timeout 3m;' >> /etc/nginx/nginx.conf
  4454. echo '' >> /etc/nginx/nginx.conf
  4455. echo ' # how long to wait for the client to send a request header, its set for testing purpose' >> /etc/nginx/nginx.conf
  4456. echo ' client_header_timeout 3m;' >> /etc/nginx/nginx.conf
  4457. echo '' >> /etc/nginx/nginx.conf
  4458. echo ' ##' >> /etc/nginx/nginx.conf
  4459. echo ' # Basic Settings' >> /etc/nginx/nginx.conf
  4460. echo ' ##' >> /etc/nginx/nginx.conf
  4461. echo '' >> /etc/nginx/nginx.conf
  4462. echo ' sendfile on;' >> /etc/nginx/nginx.conf
  4463. echo ' tcp_nopush on;' >> /etc/nginx/nginx.conf
  4464. echo ' tcp_nodelay on;' >> /etc/nginx/nginx.conf
  4465. echo ' keepalive_timeout 65;' >> /etc/nginx/nginx.conf
  4466. echo ' types_hash_max_size 2048;' >> /etc/nginx/nginx.conf
  4467. echo ' server_tokens off;' >> /etc/nginx/nginx.conf
  4468. echo '' >> /etc/nginx/nginx.conf
  4469. echo ' # server_names_hash_bucket_size 64;' >> /etc/nginx/nginx.conf
  4470. echo ' # server_name_in_redirect off;' >> /etc/nginx/nginx.conf
  4471. echo '' >> /etc/nginx/nginx.conf
  4472. echo ' include /etc/nginx/mime.types;' >> /etc/nginx/nginx.conf
  4473. echo ' default_type application/octet-stream;' >> /etc/nginx/nginx.conf
  4474. echo '' >> /etc/nginx/nginx.conf
  4475. echo ' ##' >> /etc/nginx/nginx.conf
  4476. echo ' # Logging Settings' >> /etc/nginx/nginx.conf
  4477. echo ' ##' >> /etc/nginx/nginx.conf
  4478. echo '' >> /etc/nginx/nginx.conf
  4479. echo ' access_log /var/log/nginx/access.log;' >> /etc/nginx/nginx.conf
  4480. echo ' error_log /var/log/nginx/error.log;' >> /etc/nginx/nginx.conf
  4481. echo '' >> /etc/nginx/nginx.conf
  4482. echo ' ###' >> /etc/nginx/nginx.conf
  4483. echo ' # Gzip Settings' >> /etc/nginx/nginx.conf
  4484. echo ' ##' >> /etc/nginx/nginx.conf
  4485. echo ' gzip on;' >> /etc/nginx/nginx.conf
  4486. echo ' gzip_disable "msie6";' >> /etc/nginx/nginx.conf
  4487. echo '' >> /etc/nginx/nginx.conf
  4488. echo ' # gzip_vary on;' >> /etc/nginx/nginx.conf
  4489. echo ' # gzip_proxied any;' >> /etc/nginx/nginx.conf
  4490. echo ' # gzip_comp_level 6;' >> /etc/nginx/nginx.conf
  4491. echo ' # gzip_buffers 16 8k;' >> /etc/nginx/nginx.conf
  4492. echo ' # gzip_http_version 1.1;' >> /etc/nginx/nginx.conf
  4493. echo ' # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;' >> /etc/nginx/nginx.conf
  4494. echo '' >> /etc/nginx/nginx.conf
  4495. echo ' ##' >> /etc/nginx/nginx.conf
  4496. echo ' # Virtual Host Configs' >> /etc/nginx/nginx.conf
  4497. echo ' ##' >> /etc/nginx/nginx.conf
  4498. echo '' >> /etc/nginx/nginx.conf
  4499. echo ' include /etc/nginx/conf.d/*.conf;' >> /etc/nginx/nginx.conf
  4500. echo ' include /etc/nginx/sites-enabled/*;' >> /etc/nginx/nginx.conf
  4501. echo '}' >> /etc/nginx/nginx.conf
  4502. # install a script to easily enable and disable nginx virtual hosts
  4503. if [ ! -d $INSTALL_DIR ]; then
  4504. mkdir $INSTALL_DIR
  4505. fi
  4506. cd $INSTALL_DIR
  4507. git clone https://github.com/perusio/nginx_ensite
  4508. cd $INSTALL_DIR/nginx_ensite
  4509. cp nginx_* /usr/sbin
  4510. nginx_dissite default
  4511. echo 'install_web_server' >> $COMPLETION_FILE
  4512. }
  4513. function configure_php {
  4514. sed -i "s/memory_limit = 128M/memory_limit = ${MAX_PHP_MEMORY}M/g" /etc/php5/fpm/php.ini
  4515. sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php5/fpm/php.ini
  4516. sed -i "s/memory_limit = -1/memory_limit = ${MAX_PHP_MEMORY}M/g" /etc/php5/cli/php.ini
  4517. sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 50M/g" /etc/php5/fpm/php.ini
  4518. sed -i "s/post_max_size = 8M/post_max_size = 50M/g" /etc/php5/fpm/php.ini
  4519. }
  4520. function install_mariadb {
  4521. if grep -Fxq "install_mariadb" $COMPLETION_FILE; then
  4522. return
  4523. fi
  4524. if ! grep -Fxq "random_number_generator" $COMPLETION_FILE; then
  4525. echo 'install_mariadb was called before the random number generator was initialised'
  4526. exit 853
  4527. fi
  4528. apt-get -y --force-yes install python-software-properties debconf-utils
  4529. apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
  4530. add-apt-repository 'deb http://mariadb.biz.net.id//repo/10.1/debian sid main'
  4531. apt-get -y --force-yes install software-properties-common
  4532. apt-get -y update
  4533. get_mariadb_password
  4534. if [ ! $MARIADB_PASSWORD ]; then
  4535. MARIADB_PASSWORD=$(openssl rand -base64 32)
  4536. echo "$MARIADB_PASSWORD" > $DATABASE_PASSWORD_FILE
  4537. chmod 600 $DATABASE_PASSWORD_FILE
  4538. echo '' >> /home/$MY_USERNAME/README
  4539. echo '' >> /home/$MY_USERNAME/README
  4540. echo 'MariaDB / MySql' >> /home/$MY_USERNAME/README
  4541. echo '===============' >> /home/$MY_USERNAME/README
  4542. echo "Your MariaDB password is: $MARIADB_PASSWORD" >> /home/$MY_USERNAME/README
  4543. echo '' >> /home/$MY_USERNAME/README
  4544. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  4545. fi
  4546. debconf-set-selections <<< "mariadb-server mariadb-server/root_password password $MARIADB_PASSWORD"
  4547. debconf-set-selections <<< "mariadb-server mariadb-server/root_password_again password $MARIADB_PASSWORD"
  4548. apt-get -y --force-yes install mariadb-server
  4549. if [ ! -d /etc/mysql ]; then
  4550. echo "ERROR: mariadb-server does not appear to have installed. $CHECK_MESSAGE"
  4551. exit 54
  4552. fi
  4553. mysqladmin -u root password "$MARIADB_PASSWORD"
  4554. echo 'install_mariadb' >> $COMPLETION_FILE
  4555. }
  4556. function backup_databases_script_header {
  4557. if [ ! -f /usr/bin/backupdatabases ]; then
  4558. # daily
  4559. echo '#!/bin/sh' > /usr/bin/backupdatabases
  4560. echo '' >> /usr/bin/backupdatabases
  4561. echo "EMAIL='$MY_EMAIL_ADDRESS'" >> /usr/bin/backupdatabases
  4562. echo '' >> /usr/bin/backupdatabases
  4563. echo -n 'MYSQL_PASSWORD=$(cat ' >> /usr/bin/backupdatabases
  4564. echo "$DATABASE_PASSWORD_FILE)" >> /usr/bin/backupdatabases
  4565. echo 'umask 0077' >> /usr/bin/backupdatabases
  4566. echo '' >> /usr/bin/backupdatabases
  4567. echo '# exit if we are backing up to friends servers' >> /usr/bin/backupdatabases
  4568. echo "if [ -f $FRIENDS_SERVERS_LIST ]; then" >> /usr/bin/backupdatabases
  4569. echo ' exit 1' >> /usr/bin/backupdatabases
  4570. echo 'fi' >> /usr/bin/backupdatabases
  4571. chmod 600 /usr/bin/backupdatabases
  4572. chmod +x /usr/bin/backupdatabases
  4573. echo '#!/bin/sh' > /etc/cron.daily/backupdatabasesdaily
  4574. echo '/usr/bin/backupdatabases' >> /etc/cron.daily/backupdatabasesdaily
  4575. chmod 600 /etc/cron.daily/backupdatabasesdaily
  4576. chmod +x /etc/cron.daily/backupdatabasesdaily
  4577. # weekly
  4578. echo '#!/bin/sh' > /etc/cron.weekly/backupdatabasesweekly
  4579. echo '' >> /etc/cron.weekly/backupdatabasesweekly
  4580. echo 'umask 0077' >> /etc/cron.weekly/backupdatabasesweekly
  4581. chmod 600 /etc/cron.weekly/backupdatabasesweekly
  4582. chmod +x /etc/cron.weekly/backupdatabasesweekly
  4583. # monthly
  4584. echo '#!/bin/sh' > /etc/cron.monthly/backupdatabasesmonthly
  4585. echo '' >> /etc/cron.monthly/backupdatabasesmonthly
  4586. echo 'umask 0077' >> /etc/cron.monthly/backupdatabasesmonthly
  4587. chmod 600 /etc/cron.monthly/backupdatabasesmonthly
  4588. chmod +x /etc/cron.monthly/backupdatabasesmonthly
  4589. fi
  4590. }
  4591. function repair_databases_script {
  4592. if grep -Fxq "repair_databases_script" $COMPLETION_FILE; then
  4593. return
  4594. fi
  4595. if [ ! -f $DATABASE_PASSWORD_FILE ]; then
  4596. return
  4597. fi
  4598. echo '#!/bin/bash' > /usr/bin/repairdatabase
  4599. echo '' >> /usr/bin/repairdatabase
  4600. echo 'DATABASE=$1' >> /usr/bin/repairdatabase
  4601. echo "EMAIL=$MY_EMAIL_ADDRESS" >> /usr/bin/repairdatabase
  4602. echo '' >> /usr/bin/repairdatabase
  4603. echo -n 'MYSQL_ROOT_PASSWORD=$(cat ' >> /usr/bin/repairdatabase
  4604. echo "$DATABASE_PASSWORD_FILE)" >> /usr/bin/repairdatabase
  4605. echo 'TEMPFILE=/root/repairdatabase_$DATABASE' >> /usr/bin/repairdatabase
  4606. echo '' >> /usr/bin/repairdatabase
  4607. echo 'umask 0077' >> /usr/bin/repairdatabase
  4608. echo '' >> /usr/bin/repairdatabase
  4609. echo '# check the database' >> /usr/bin/repairdatabase
  4610. echo 'mysqlcheck -c -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE > $TEMPFILE' >> /usr/bin/repairdatabase
  4611. echo '' >> /usr/bin/repairdatabase
  4612. echo '# Attempt to repair the database if it contains errors' >> /usr/bin/repairdatabase
  4613. echo 'if grep -q "Error" "$TEMPFILE"; then' >> /usr/bin/repairdatabase
  4614. echo ' mysqlcheck -u root --password=$MYSQL_ROOT_PASSWORD --auto-repair $DATABASE' >> /usr/bin/repairdatabase
  4615. echo 'else' >> /usr/bin/repairdatabase
  4616. echo ' # No errors were found, so exit' >> /usr/bin/repairdatabase
  4617. echo ' rm -f $TEMPFILE' >> /usr/bin/repairdatabase
  4618. echo ' exit 0' >> /usr/bin/repairdatabase
  4619. echo 'fi' >> /usr/bin/repairdatabase
  4620. echo 'rm -f $TEMPFILE' >> /usr/bin/repairdatabase
  4621. echo '' >> /usr/bin/repairdatabase
  4622. echo '# Check the database again' >> /usr/bin/repairdatabase
  4623. echo 'mysqlcheck -c -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE > $TEMPFILE' >> /usr/bin/repairdatabase
  4624. echo '' >> /usr/bin/repairdatabase
  4625. echo '# If it still contains errors then restore from backup' >> /usr/bin/repairdatabase
  4626. echo 'if grep -q "Error" "$TEMPFILE"; then' >> /usr/bin/repairdatabase
  4627. echo ' mysql -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE -o < /var/backups/${DATABASE}_daily.sql' >> /usr/bin/repairdatabase
  4628. echo '' >> /usr/bin/repairdatabase
  4629. echo ' # Send a warning email' >> /usr/bin/repairdatabase
  4630. echo ' echo "$DATABASE database corruption could not be repaired. Restored from backup." | mail -s "Freedombone database maintenance" $EMAIL' >> /usr/bin/repairdatabase
  4631. echo ' rm -f $TEMPFILE' >> /usr/bin/repairdatabase
  4632. echo '' >> /usr/bin/repairdatabase
  4633. echo ' exit 1' >> /usr/bin/repairdatabase
  4634. echo 'fi' >> /usr/bin/repairdatabase
  4635. echo 'rm -f $TEMPFILE' >> /usr/bin/repairdatabase
  4636. echo '' >> /usr/bin/repairdatabase
  4637. echo 'exit 0' >> /usr/bin/repairdatabase
  4638. chmod 600 /usr/bin/repairdatabase
  4639. chmod +x /usr/bin/repairdatabase
  4640. echo '#!/bin/bash' > /etc/cron.hourly/repair
  4641. echo '' >> /etc/cron.hourly/repair
  4642. chmod 600 /etc/cron.hourly/repair
  4643. chmod +x /etc/cron.hourly/repair
  4644. echo 'repair_databases_script' >> $COMPLETION_FILE
  4645. }
  4646. function install_owncloud_music_app {
  4647. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  4648. return
  4649. fi
  4650. if grep -Fxq "install_owncloud_music_app" $COMPLETION_FILE; then
  4651. return
  4652. fi
  4653. cd /usr/share/owncloud/apps
  4654. git clone https://github.com/owncloud/music music
  4655. if grep -q "Music player in Owncloud" /home/$MY_USERNAME/README; then
  4656. echo '' >> /home/$MY_USERNAME/README
  4657. echo '' >> /home/$MY_USERNAME/README
  4658. echo 'Music player in Owncloud' >> /home/$MY_USERNAME/README
  4659. echo '========================' >> /home/$MY_USERNAME/README
  4660. echo 'To enable the music app within ouwncloud log in to the Owncloud' >> /home/$MY_USERNAME/README
  4661. echo 'administrator account then go to Apps on the left hand dropdown' >> /home/$MY_USERNAME/README
  4662. echo 'menu and enable the music app. You can then log out and log back' >> /home/$MY_USERNAME/README
  4663. echo 'in as your Owncloud user and select music from the left hand' >> /home/$MY_USERNAME/README
  4664. echo 'dropdown menu.' >> /home/$MY_USERNAME/README
  4665. fi
  4666. echo 'install_owncloud_music_app' >> $COMPLETION_FILE
  4667. }
  4668. function install_owncloud {
  4669. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  4670. return
  4671. fi
  4672. if ! grep -Fxq "random_number_generator" $COMPLETION_FILE; then
  4673. echo 'install_owncloud was called before the random number generator was initialised'
  4674. exit 853
  4675. fi
  4676. OWNCLOUD_COMPLETION_MSG1=" *** Freedombone $SYSTEM_TYPE is now installed ***"
  4677. OWNCLOUD_COMPLETION_MSG2="Open $OWNCLOUD_DOMAIN_NAME in a web browser to complete the setup"
  4678. if grep -Fxq "install_owncloud" $COMPLETION_FILE; then
  4679. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  4680. install_owncloud_music_app
  4681. create_backup_script
  4682. create_restore_script
  4683. backup_to_friends_servers
  4684. intrusion_detection
  4685. # unmount any attached usb drive
  4686. if [ -d $USB_MOUNT ]; then
  4687. umount $USB_MOUNT
  4688. rm -rf $USB_MOUNT
  4689. fi
  4690. echo ''
  4691. echo "$OWNCLOUD_COMPLETION_MSG1"
  4692. echo "$OWNCLOUD_COMPLETION_MSG2"
  4693. exit 0
  4694. fi
  4695. return
  4696. fi
  4697. # if this is exclusively a cloud setup
  4698. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  4699. OWNCLOUD_DOMAIN_NAME=$DOMAIN_NAME
  4700. OWNCLOUD_FREEDNS_SUBDOMAIN_CODE=$FREEDNS_SUBDOMAIN_CODE
  4701. fi
  4702. if [ ! $OWNCLOUD_DOMAIN_NAME ]; then
  4703. return
  4704. fi
  4705. if ! [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  4706. if [ $SYSTEM_TYPE ]; then
  4707. return
  4708. fi
  4709. fi
  4710. apt-get -y --force-yes install owncloud
  4711. install_mariadb
  4712. get_mariadb_password
  4713. get_mariadb_owncloud_admin_password
  4714. if [ ! $OWNCLOUD_ADMIN_PASSWORD ]; then
  4715. OWNCLOUD_ADMIN_PASSWORD=$(openssl rand -base64 32)
  4716. fi
  4717. if ! grep -q "Owncloud database user" /home/$MY_USERNAME/README; then
  4718. echo '' >> /home/$MY_USERNAME/README
  4719. echo '' >> /home/$MY_USERNAME/README
  4720. echo 'Owncloud' >> /home/$MY_USERNAME/README
  4721. echo '========' >> /home/$MY_USERNAME/README
  4722. echo 'Owncloud database user: owncloudadmin' >> /home/$MY_USERNAME/README
  4723. echo "Owncloud database password: $OWNCLOUD_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  4724. echo 'Owncloud database name: owncloud' >> /home/$MY_USERNAME/README
  4725. echo '' >> /home/$MY_USERNAME/README
  4726. echo 'After creating an administrator account then create a user account via' >> /home/$MY_USERNAME/README
  4727. echo "the Users dropdown menu entry. The username should be '$MY_USERNAME'." >> /home/$MY_USERNAME/README
  4728. echo '' >> /home/$MY_USERNAME/README
  4729. echo 'On mobile devices you can download the Owncloud client via F-Droid.' >> /home/$MY_USERNAME/README
  4730. echo '' >> /home/$MY_USERNAME/README
  4731. echo 'To synchronise calendar entries with Android "install CalDAV Sync Adapter"' >> /home/$MY_USERNAME/README
  4732. echo 'using F-Droid then go to settings/accounts and add a CalDav account with' >> /home/$MY_USERNAME/README
  4733. echo "the URL https://$OWNCLOUD_DOMAIN_NAME/remote.php/caldav/principals/$MY_USERNAME" >> /home/$MY_USERNAME/README
  4734. echo 'and the username and password shown above.' >> /home/$MY_USERNAME/README
  4735. fi
  4736. echo "create database owncloud;
  4737. CREATE USER 'owncloudadmin'@'localhost' IDENTIFIED BY '$OWNCLOUD_ADMIN_PASSWORD';
  4738. GRANT ALL PRIVILEGES ON owncloud.* TO 'owncloudadmin'@'localhost';
  4739. quit" > $INSTALL_DIR/batch.sql
  4740. chmod 600 $INSTALL_DIR/batch.sql
  4741. mysql -u root --password="$MARIADB_PASSWORD" < $INSTALL_DIR/batch.sql
  4742. shred -zu $INSTALL_DIR/batch.sql
  4743. if [ ! -d /var/www/$OWNCLOUD_DOMAIN_NAME ]; then
  4744. mkdir /var/www/$OWNCLOUD_DOMAIN_NAME
  4745. fi
  4746. if [ -d /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs ]; then
  4747. rm -rf /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs
  4748. fi
  4749. ln -s /usr/share/owncloud /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs
  4750. echo 'server {' > /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4751. echo ' listen 80;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4752. echo " server_name $OWNCLOUD_DOMAIN_NAME;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4753. echo ' access_log off;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4754. echo " error_log /var/log/nginx/$OWNCLOUD_DOMAIN_NAME_error.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4755. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4756. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4757. echo ' rewrite ^ https://$server_name$request_uri? permanent;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4758. echo '}' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4759. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4760. echo 'server {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4761. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4762. echo " root /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4763. echo " server_name $OWNCLOUD_DOMAIN_NAME;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4764. echo ' access_log off;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4765. echo " error_log /var/log/nginx/$OWNCLOUD_DOMAIN_NAME_error.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4766. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4767. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4768. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4769. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4770. echo ' ssl on;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4771. echo " ssl_certificate /etc/ssl/certs/$OWNCLOUD_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4772. echo " ssl_certificate_key /etc/ssl/private/$OWNCLOUD_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4773. echo " ssl_dhparam /etc/ssl/certs/$OWNCLOUD_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4774. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4775. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4776. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4777. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4778. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4779. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4780. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4781. echo ' add_header Strict-Transport-Security max-age=15768000;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4782. echo ' # if you want to be able to access the site via HTTP' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4783. echo ' # then replace the above with the following:' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4784. echo ' # add_header Strict-Transport-Security "max-age=0;";' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4785. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4786. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4787. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4788. echo ' allow all;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4789. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4790. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4791. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4792. echo ' client_max_body_size 10G; # set max upload size' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4793. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4794. echo ' fastcgi_buffers 64 4K;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4795. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4796. echo ' rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4797. echo ' rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4798. echo ' rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4799. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4800. echo ' index index.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4801. echo ' error_page 403 /core/templates/403.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4802. echo ' error_page 404 /core/templates/404.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4803. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4804. echo ' location = /robots.txt {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4805. echo ' allow all;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4806. echo ' log_not_found off;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4807. echo ' access_log off;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4808. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4809. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4810. echo ' location ~ ^/(data|config|\.ht|db_structure\.xml|README) {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4811. echo ' deny all;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4812. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4813. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4814. echo ' location / {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4815. echo ' # The following 2 rules are only needed with webfinger' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4816. echo ' rewrite ^/.well-known/host-meta /public.php?service=host-meta last;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4817. echo ' rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4818. echo ' rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4819. echo ' rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4820. echo ' rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4821. echo ' try_files $uri $uri/ index.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4822. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4823. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4824. echo ' location ~ ^(.+?\.php)(/.*)?$ {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4825. echo ' try_files $1 =404;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4826. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4827. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4828. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4829. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4830. echo ' fastcgi_param SCRIPT_FILENAME $document_root$1;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4831. echo ' fastcgi_param PATH_INFO $2;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4832. echo ' fastcgi_param HTTPS on;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4833. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4834. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4835. echo ' # Optional: set long EXPIRES header on static assets' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4836. echo ' location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4837. echo ' expires 30d;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4838. echo " # Optional: Don't log access to assets" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4839. echo ' access_log off;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4840. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4841. echo '}' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  4842. configure_php
  4843. if [ ! -f /etc/ssl/private/$OWNCLOUD_DOMAIN_NAME.key ]; then
  4844. makecert $OWNCLOUD_DOMAIN_NAME
  4845. fi
  4846. # Ensure that the database gets backed up locally, if remote
  4847. # backups are not being used
  4848. backup_databases_script_header
  4849. echo '' >> /usr/bin/backupdatabases
  4850. echo '# Backup Owncloud database' >> /usr/bin/backupdatabases
  4851. echo 'TEMPFILE=/root/owncloud.sql' >> /usr/bin/backupdatabases
  4852. echo 'DAILYFILE=/var/backups/owncloud_daily.sql' >> /usr/bin/backupdatabases
  4853. echo 'mysqldump --password="$MYSQL_PASSWORD" owncloud > $TEMPFILE' >> /usr/bin/backupdatabases
  4854. echo 'FILESIZE=$(stat -c%s $TEMPFILE)' >> /usr/bin/backupdatabases
  4855. echo 'if [ "$FILESIZE" -eq "0" ]; then' >> /usr/bin/backupdatabases
  4856. echo ' if [ -f $DAILYFILE ]; then' >> /usr/bin/backupdatabases
  4857. echo ' cp $DAILYFILE $TEMPFILE' >> /usr/bin/backupdatabases
  4858. echo '' >> /usr/bin/backupdatabases
  4859. echo ' # try to restore yesterdays database' >> /usr/bin/backupdatabases
  4860. echo ' mysql -u root --password="$MYSQL_PASSWORD" owncloud -o < $DAILYFILE' >> /usr/bin/backupdatabases
  4861. echo '' >> /usr/bin/backupdatabases
  4862. echo ' # Send a warning email' >> /usr/bin/backupdatabases
  4863. 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
  4864. echo ' else' >> /usr/bin/backupdatabases
  4865. echo ' # Send a warning email' >> /usr/bin/backupdatabases
  4866. echo ' echo "Unable to create a backup of the Owncloud database." | mail -s "Owncloud backup" $EMAIL' >> /usr/bin/backupdatabases
  4867. echo ' fi' >> /usr/bin/backupdatabases
  4868. echo 'else' >> /usr/bin/backupdatabases
  4869. echo ' chmod 600 $TEMPFILE' >> /usr/bin/backupdatabases
  4870. echo ' mv $TEMPFILE $DAILYFILE' >> /usr/bin/backupdatabases
  4871. echo '' >> /usr/bin/backupdatabases
  4872. echo ' # Make the backup readable only by root' >> /usr/bin/backupdatabases
  4873. echo ' chmod 600 $DAILYFILE' >> /usr/bin/backupdatabases
  4874. echo 'fi' >> /usr/bin/backupdatabases
  4875. nginx_ensite $OWNCLOUD_DOMAIN_NAME
  4876. service php5-fpm restart
  4877. service nginx restart
  4878. # update the dynamic DNS
  4879. if [ $OWNCLOUD_FREEDNS_SUBDOMAIN_CODE ]; then
  4880. if [[ $OWNCLOUD_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  4881. if ! grep -q "$OWNCLOUD_DOMAIN_NAME" /usr/bin/dynamicdns; then
  4882. echo "# $OWNCLOUD_DOMAIN_NAME" >> /usr/bin/dynamicdns
  4883. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$OWNCLOUD_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  4884. fi
  4885. fi
  4886. else
  4887. echo 'WARNING: No freeDNS subdomain code given for Owncloud. It is assumed that you are using some other dynamic DNS provider.'
  4888. fi
  4889. echo 'install_owncloud' >> $COMPLETION_FILE
  4890. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  4891. install_owncloud_music_app
  4892. create_backup_script
  4893. create_restore_script
  4894. backup_to_friends_servers
  4895. intrusion_detection
  4896. # unmount any attached usb drive
  4897. if [ -d $USB_MOUNT ]; then
  4898. umount $USB_MOUNT
  4899. rm -rf $USB_MOUNT
  4900. fi
  4901. echo ''
  4902. echo "$OWNCLOUD_COMPLETION_MSG1"
  4903. echo "$OWNCLOUD_COMPLETION_MSG2"
  4904. exit 0
  4905. fi
  4906. }
  4907. function install_xmpp {
  4908. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  4909. return
  4910. fi
  4911. if ! grep -Fxq "random_number_generator" $COMPLETION_FILE; then
  4912. echo 'install_xmpp was called before the random number generator was initialised'
  4913. exit 853
  4914. fi
  4915. if grep -Fxq "install_xmpp" $COMPLETION_FILE; then
  4916. return
  4917. fi
  4918. apt-get -y --force-yes install prosody
  4919. if [ ! -d /etc/prosody ]; then
  4920. echo "ERROR: prosody does not appear to have installed. $CHECK_MESSAGE"
  4921. exit 52
  4922. fi
  4923. if [ ! -f "/etc/ssl/private/xmpp.key" ]; then
  4924. makecert xmpp
  4925. fi
  4926. chown prosody:prosody /etc/ssl/private/xmpp.key
  4927. chown prosody:prosody /etc/ssl/certs/xmpp.*
  4928. cp -a /etc/prosody/conf.avail/example.com.cfg.lua /etc/prosody/conf.avail/xmpp.cfg.lua
  4929. sed -i 's|/etc/prosody/certs/example.com.key|/etc/ssl/private/xmpp.key|g' /etc/prosody/conf.avail/xmpp.cfg.lua
  4930. sed -i 's|/etc/prosody/certs/example.com.crt|/etc/ssl/certs/xmpp.crt|g' /etc/prosody/conf.avail/xmpp.cfg.lua
  4931. if ! grep -q "xmpp.dhparam" /etc/prosody/conf.avail/xmpp.cfg.lua; then
  4932. sed -i '/certificate =/a\ dhparam = "/etc/ssl/certs/xmpp.dhparam";' /etc/prosody/conf.avail/xmpp.cfg.lua
  4933. fi
  4934. sed -i "s/example.com/$DOMAIN_NAME/g" /etc/prosody/conf.avail/xmpp.cfg.lua
  4935. sed -i 's/enabled = false -- Remove this line to enable this host//g' /etc/prosody/conf.avail/xmpp.cfg.lua
  4936. if ! grep -q "modules_enabled" /etc/prosody/conf.avail/xmpp.cfg.lua; then
  4937. echo '' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  4938. echo 'modules_enabled = {' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  4939. echo ' "bosh"; -- Enable mod_bosh' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  4940. echo ' "tls"; -- Enable mod_tls' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  4941. echo ' "saslauth"; -- Enable mod_saslauth' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  4942. echo '}' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  4943. echo '' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  4944. echo 'c2s_require_encryption = true' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  4945. echo 's2s_require_encryption = true' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  4946. echo 'allow_unencrypted_plain_auth = false' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  4947. fi
  4948. ln -sf /etc/prosody/conf.avail/xmpp.cfg.lua /etc/prosody/conf.d/xmpp.cfg.lua
  4949. sed -i 's|/etc/prosody/certs/localhost.key|/etc/ssl/private/xmpp.key|g' /etc/prosody/prosody.cfg.lua
  4950. sed -i 's|/etc/prosody/certs/localhost.crt|/etc/ssl/certs/xmpp.crt|g' /etc/prosody/prosody.cfg.lua
  4951. if ! grep -q "xmpp.dhparam" /etc/prosody/prosody.cfg.lua; then
  4952. sed -i '/certificate =/a\ dhparam = "/etc/ssl/certs/xmpp.dhparam";' /etc/prosody/prosody.cfg.lua
  4953. fi
  4954. sed -i 's/c2s_require_encryption = false/c2s_require_encryption = true/g' /etc/prosody/prosody.cfg.lua
  4955. if ! grep -q "s2s_require_encryption" /etc/prosody/prosody.cfg.lua; then
  4956. sed -i '/c2s_require_encryption/a\s2s_require_encryption = true' /etc/prosody/prosody.cfg.lua
  4957. fi
  4958. if ! grep -q "allow_unencrypted_plain_auth" /etc/prosody/prosody.cfg.lua; then
  4959. echo 'allow_unencrypted_plain_auth = false' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  4960. fi
  4961. sed -i 's/--"bosh";/"bosh";/g' /etc/prosody/prosody.cfg.lua
  4962. sed -i 's/authentication = "internal_plain"/authentication = "internal_hashed"/g' /etc/prosody/prosody.cfg.lua
  4963. sed -i 's/enabled = false -- Remove this line to enable this host//g' /etc/prosody/prosody.cfg.lua
  4964. sed -i 's|key = "/etc/prosody/certs/example.com.key"|key = "/etc/ssl/private/xmpp.key"|g' /etc/prosody/prosody.cfg.lua
  4965. sed -i 's|certificate = "/etc/prosody/certs/example.com.crt"|certificate = "/etc/ssl/certs/xmpp.crt"|g' /etc/prosody/prosody.cfg.lua
  4966. sed -i "s/example.com/$DOMAIN_NAME/g" /etc/prosody/prosody.cfg.lua
  4967. service prosody restart
  4968. touch /home/$MY_USERNAME/README
  4969. if ! grep -q "Your XMPP password is" /home/$MY_USERNAME/README; then
  4970. XMPP_PASSWORD=$(openssl rand -base64 8)
  4971. prosodyctl register $MY_USERNAME $DOMAIN_NAME $XMPP_PASSWORD
  4972. echo '' >> /home/$MY_USERNAME/README
  4973. echo '' >> /home/$MY_USERNAME/README
  4974. echo 'XMPP' >> /home/$MY_USERNAME/README
  4975. echo '====' >> /home/$MY_USERNAME/README
  4976. echo "Your XMPP password is: $XMPP_PASSWORD" >> /home/$MY_USERNAME/README
  4977. echo 'You can change it with: ' >> /home/$MY_USERNAME/README
  4978. echo '' >> /home/$MY_USERNAME/README
  4979. echo " prosodyctl passwd $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/README
  4980. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  4981. fi
  4982. echo 'install_xmpp' >> $COMPLETION_FILE
  4983. }
  4984. function install_watchdog_script {
  4985. if grep -Fxq "install_watchdog_script" $COMPLETION_FILE; then
  4986. return
  4987. fi
  4988. echo '#!/bin/bash' > /usr/bin/$WATCHDOG_SCRIPT_NAME
  4989. echo 'LOGFILE=/var/log/keepon.log' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  4990. echo 'CURRENT_DATE=$(date)' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  4991. # application specific stuff is added later
  4992. chmod +x /usr/bin/$WATCHDOG_SCRIPT_NAME
  4993. if ! grep -q "/usr/bin/$WATCHDOG_SCRIPT_NAME" /etc/crontab; then
  4994. echo "*/1 * * * * root /usr/bin/$WATCHDOG_SCRIPT_NAME" >> /etc/crontab
  4995. fi
  4996. echo 'install_watchdog_script' >> $COMPLETION_FILE
  4997. }
  4998. function install_irc_server {
  4999. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  5000. return
  5001. fi
  5002. if ! grep -Fxq "random_number_generator" $COMPLETION_FILE; then
  5003. echo 'install_irc_server was called before the random number generator was initialised'
  5004. exit 853
  5005. fi
  5006. if grep -Fxq "install_irc_server" $COMPLETION_FILE; then
  5007. return
  5008. fi
  5009. apt-get -y --force-yes install ngircd
  5010. if [ ! -d /etc/ngircd ]; then
  5011. echo "ERROR: ngircd does not appear to have installed. $CHECK_MESSAGE"
  5012. exit 53
  5013. fi
  5014. if [ ! -f /etc/ssl/private/ngircd.key ]; then
  5015. makecert ngircd
  5016. fi
  5017. echo '**************************************************' > /etc/ngircd/motd
  5018. echo '* F R E E D O M B O N E I R C *' >> /etc/ngircd/motd
  5019. echo '* *' >> /etc/ngircd/motd
  5020. echo '* Freedom in the Cloud *' >> /etc/ngircd/motd
  5021. echo '**************************************************' >> /etc/ngircd/motd
  5022. sed -i 's|MotdFile = /etc/ngircd/ngircd.motd|MotdFile = /etc/ngircd/motd|g' /etc/ngircd/ngircd.conf
  5023. sed -i "s/irc@irc.example.com/$MY_EMAIL_ADDRESS/g" /etc/ngircd/ngircd.conf
  5024. sed -i "s/irc.example.net/$DOMAIN_NAME/g" /etc/ngircd/ngircd.conf
  5025. sed -i "s|Yet another IRC Server running on Debian GNU/Linux|IRC Server of $DOMAIN_NAME|g" /etc/ngircd/ngircd.conf
  5026. sed -i 's/;Password = wealllikedebian/Password =/g' /etc/ngircd/ngircd.conf
  5027. sed -i 's|;CertFile = /etc/ssl/certs/server.crt|CertFile = /etc/ssl/certs/ngircd.crt|g' /etc/ngircd/ngircd.conf
  5028. sed -i 's|;DHFile = /etc/ngircd/dhparams.pem|DHFile = /etc/ssl/certs/ngircd.dhparam|g' /etc/ngircd/ngircd.conf
  5029. sed -i 's|;KeyFile = /etc/ssl/private/server.key|KeyFile = /etc/ssl/private/ngircd.key|g' /etc/ngircd/ngircd.conf
  5030. sed -i 's/;Ports = 6697, 9999/Ports = 6697, 9999/g' /etc/ngircd/ngircd.conf
  5031. sed -i 's/;Name = #ngircd/Name = #freedombone/g' /etc/ngircd/ngircd.conf
  5032. sed -i 's/;Topic = Our ngircd testing channel/Topic = Freedombone chat channel/g' /etc/ngircd/ngircd.conf
  5033. sed -i 's/;MaxUsers = 23/MaxUsers = 23/g' /etc/ngircd/ngircd.conf
  5034. sed -i 's|;KeyFile = /etc/ngircd/#chan.key|KeyFile = /etc/ngircd/#freedombone.key|g' /etc/ngircd/ngircd.conf
  5035. sed -i 's/;CloakHost = cloaked.host/CloakHost = freedombone/g' /etc/ngircd/ngircd.conf
  5036. IRC_SALT=$(openssl rand -base64 32)
  5037. IRC_OPERATOR_PASSWORD=$(openssl rand -base64 8)
  5038. sed -i "s|;CloakHostSalt = abcdefghijklmnopqrstuvwxyz|CloakHostSalt = $IRC_SALT|g" /etc/ngircd/ngircd.conf
  5039. sed -i 's/;ConnectIPv4 = yes/ConnectIPv4 = yes/g' /etc/ngircd/ngircd.conf
  5040. sed -i 's/;MorePrivacy = no/MorePrivacy = yes/g' /etc/ngircd/ngircd.conf
  5041. sed -i 's/;RequireAuthPing = no/RequireAuthPing = no/g' /etc/ngircd/ngircd.conf
  5042. sed -i "s/;Name = TheOper/Name = $MY_USERNAME/g" /etc/ngircd/ngircd.conf
  5043. sed -i "s/;Password = ThePwd/Password = $IRC_OPERATOR_PASSWORD/g" /etc/ngircd/ngircd.conf
  5044. service ngircd start
  5045. # keep the daemon running
  5046. echo '' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  5047. echo '# keep irc daemon running' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  5048. echo 'IRC_RUNNING=$(pgrep ngircd > /dev/null && echo Running)' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  5049. echo 'if [ ! $IRC_RUNNING ]; then' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  5050. echo ' service ngircd start' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  5051. echo ' echo -n $CURRENT_DATE >> $LOGFILE' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  5052. echo ' echo " IRC daemon restarted" >> $LOGFILE' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  5053. echo 'fi' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  5054. if ! grep -q "IRC Server" /home/$MY_USERNAME/README; then
  5055. echo '' >> /home/$MY_USERNAME/README
  5056. echo '' >> /home/$MY_USERNAME/README
  5057. echo 'IRC Server' >> /home/$MY_USERNAME/README
  5058. echo '==========' >> /home/$MY_USERNAME/README
  5059. echo 'To connect to your IRC server in irssi:' >> /home/$MY_USERNAME/README
  5060. echo '' >> /home/$MY_USERNAME/README
  5061. echo " /server add -auto -ssl $DOMAIN_NAME 6697" >> /home/$MY_USERNAME/README
  5062. echo " /connect $DOMAIN_NAME" >> /home/$MY_USERNAME/README
  5063. echo ' /join #freedombone' >> /home/$MY_USERNAME/README
  5064. fi
  5065. echo 'install_irc_server' >> $COMPLETION_FILE
  5066. }
  5067. function get_wiki_admin_password {
  5068. if [ -f /home/$MY_USERNAME/README ]; then
  5069. if grep -q "Wiki password" /home/$MY_USERNAME/README; then
  5070. WIKI_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "Wiki password:" | awk -F ':' '{print $2}' | sed 's/^ *//')
  5071. fi
  5072. fi
  5073. }
  5074. function install_wiki {
  5075. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  5076. return
  5077. fi
  5078. if ! grep -Fxq "random_number_generator" $COMPLETION_FILE; then
  5079. echo 'install_wiki was called before the random number generator was initialised'
  5080. exit 853
  5081. fi
  5082. if grep -Fxq "install_wiki" $COMPLETION_FILE; then
  5083. return
  5084. fi
  5085. # if everything is being installed or if this is exclusively a writer setup
  5086. if [[ ! $SYSTEM_TYPE || $SYSTEM_TYPE == "$VARIANT_WRITER" ]]; then
  5087. WIKI_DOMAIN_NAME=$DOMAIN_NAME
  5088. WIKI_FREEDNS_SUBDOMAIN_CODE=$FREEDNS_SUBDOMAIN_CODE
  5089. fi
  5090. if [ ! $WIKI_DOMAIN_NAME ]; then
  5091. return
  5092. fi
  5093. apt-get -y --force-yes install dokuwiki
  5094. if [ ! -d /var/www/$WIKI_DOMAIN_NAME ]; then
  5095. mkdir /var/www/$WIKI_DOMAIN_NAME
  5096. fi
  5097. if [ -d /var/www/$WIKI_DOMAIN_NAME/htdocs ]; then
  5098. rm -rf /var/www/$WIKI_DOMAIN_NAME/htdocs
  5099. fi
  5100. if [ ! -f /etc/ssl/private/$WIKI_DOMAIN_NAME.key ]; then
  5101. makecert $WIKI_DOMAIN_NAME
  5102. fi
  5103. ln -s /usr/share/dokuwiki /var/www/$WIKI_DOMAIN_NAME/htdocs
  5104. mkdir /var/lib/dokuwiki/custom
  5105. cp /etc/dokuwiki/local.php.dist /var/lib/dokuwiki/custom/local.php
  5106. ln -s /var/lib/dokuwiki/custom/local.php /etc/dokuwiki/local.php
  5107. chown www-data /var/lib/dokuwiki/custom
  5108. chown www-data /var/lib/dokuwiki/custom/local.php
  5109. chmod 600 /var/lib/dokuwiki/custom/local.php
  5110. sed -i 's|//$conf|$conf|g' /var/lib/dokuwiki/custom/local.php
  5111. sed -i "s|joe|$MY_USERNAME|g" /var/lib/dokuwiki/custom/local.php
  5112. sed -i "s|Debian DokuWiki|$WIKI_TITLE|g" /etc/dokuwiki/local.php
  5113. # set the admin user
  5114. sed -i "s/@admin/$MY_USERNAME/g" /etc/dokuwiki/local.php
  5115. # disallow registration of new users
  5116. if ! grep -q "disableactions" /etc/dokuwiki/local.php; then
  5117. echo "$conf['disableactions'] = 'register'" >> /etc/dokuwiki/local.php
  5118. fi
  5119. if ! grep -q "disableactions" /var/lib/dokuwiki/custom/local.php; then
  5120. echo "$conf['disableactions'] = 'register';" >> /var/lib/dokuwiki/custom/local.php
  5121. fi
  5122. if ! grep -q "authtype" /var/lib/dokuwiki/custom/local.php; then
  5123. echo "$conf['authtype'] = 'authplain';" >> /var/lib/dokuwiki/custom/local.php
  5124. fi
  5125. if ! grep -q "authtype" /etc/dokuwiki/local.php; then
  5126. echo "$conf['authtype'] = 'authplain';" >> /etc/dokuwiki/local.php
  5127. fi
  5128. get_wiki_admin_password
  5129. if [ ! $WIKI_ADMIN_PASSWORD ]; then
  5130. WIKI_ADMIN_PASSWORD=$(openssl rand -base64 16)
  5131. fi
  5132. HASHED_WIKI_PASSWORD=$(echo -n "$WIKI_ADMIN_PASSWORD" | md5sum | awk -F ' ' '{print $1}')
  5133. echo -n "$MY_USERNAME:$HASHED_WIKI_PASSWORD:$MY_NAME:$MY_EMAIL:admin,user,upload" > /var/lib/dokuwiki/acl/users.auth.php
  5134. chmod 640 /var/lib/dokuwiki/acl/users.auth.php
  5135. if ! grep -q "video/ogg" /var/www/$WIKI_DOMAIN_NAME/htdocs/conf/mime.conf; then
  5136. echo 'ogv video/ogg' >> /var/www/$WIKI_DOMAIN_NAME/htdocs/conf/mime.conf
  5137. echo 'mp4 video/mp4' >> /var/www/$WIKI_DOMAIN_NAME/htdocs/conf/mime.conf
  5138. echo 'webm video/webm' >> /var/www/$WIKI_DOMAIN_NAME/htdocs/conf/mime.conf
  5139. fi
  5140. echo 'server {' > /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5141. echo ' listen 80;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5142. echo " root /var/www/$WIKI_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5143. echo " server_name $WIKI_DOMAIN_NAME;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5144. echo ' access_log off;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5145. echo " error_log /var/log/nginx/$WIKI_DOMAIN_NAME_error.log;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5146. echo ' index index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5147. echo ' charset utf-8;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5148. echo ' client_max_body_size 20m;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5149. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5150. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5151. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5152. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5153. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5154. echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5155. echo ' location / {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5156. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5157. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5158. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5159. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5160. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5161. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5162. echo ' allow all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5163. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5164. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5165. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5166. echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5167. echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5168. echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5169. echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5170. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5171. echo ' expires 30d;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5172. echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5173. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5174. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5175. echo ' # block these file types' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5176. echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5177. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5178. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5179. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5180. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5181. echo ' # or a unix socket' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5182. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5183. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5184. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5185. echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5186. echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5187. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5188. echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5189. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5190. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5191. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5192. echo ' # With php5-cgi alone:' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5193. echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5194. echo ' # With php5-fpm:' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5195. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5196. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5197. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5198. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5199. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5200. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5201. echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5202. echo ' location ~ /\. {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5203. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5204. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5205. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5206. echo ' #deny access to store' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5207. echo ' location ~ /store {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5208. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5209. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5210. echo ' location ~ /(data|conf|bin|inc)/ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5211. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5212. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5213. echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5214. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5215. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5216. echo '}' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5217. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5218. echo 'server {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5219. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5220. echo " root /var/www/$WIKI_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5221. echo " server_name $WIKI_DOMAIN_NAME;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5222. echo ' access_log off;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5223. echo " error_log /var/log/nginx/$WIKI_DOMAIN_NAME_error_ssl.log;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5224. echo ' index index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5225. echo ' charset utf-8;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5226. echo ' client_max_body_size 20m;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5227. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5228. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5229. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5230. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5231. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5232. echo ' ssl on;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5233. echo " ssl_certificate /etc/ssl/certs/$WIKI_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5234. echo " ssl_certificate_key /etc/ssl/private/$WIKI_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5235. echo " ssl_dhparam /etc/ssl/certs/$WIKI_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5236. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5237. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5238. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5239. echo ' ssl_session_cache builtin:1000 shared:SSL:10m;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5240. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5241. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5242. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5243. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5244. echo ' add_header Strict-Transport-Security "max-age=0;";' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5245. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5246. echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5247. echo ' location / {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5248. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5249. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5250. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5251. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5252. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5253. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5254. echo ' allow all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5255. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5256. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5257. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5258. echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5259. echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5260. echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5261. echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5262. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5263. echo ' expires 30d;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5264. echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5265. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5266. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5267. echo ' # block these file types' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5268. echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5269. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5270. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5271. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5272. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5273. echo ' # or a unix socket' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5274. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5275. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5276. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5277. echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5278. echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5279. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5280. echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5281. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5282. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5283. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5284. echo ' # With php5-cgi alone:' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5285. echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5286. echo ' # With php5-fpm:' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5287. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5288. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5289. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5290. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5291. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5292. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5293. echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5294. echo ' location ~ /\. {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5295. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5296. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5297. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5298. echo ' #deny access to store' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5299. echo ' location ~ /store {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5300. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5301. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5302. echo ' location ~ /(data|conf|bin|inc)/ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5303. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5304. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5305. echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5306. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5307. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5308. echo '}' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  5309. configure_php
  5310. nginx_ensite $WIKI_DOMAIN_NAME
  5311. service php5-fpm restart
  5312. service nginx restart
  5313. # update the dynamic DNS
  5314. if [ $WIKI_FREEDNS_SUBDOMAIN_CODE ]; then
  5315. if [[ $WIKI_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  5316. if ! grep -q "$WIKI_DOMAIN_NAME" /usr/bin/dynamicdns; then
  5317. echo "# $WIKI_DOMAIN_NAME" >> /usr/bin/dynamicdns
  5318. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$WIKI_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  5319. fi
  5320. fi
  5321. else
  5322. echo 'WARNING: No freeDNS subdomain code given for wiki installation. It is assumed that you are using some other dynamic DNS provider.'
  5323. fi
  5324. # add some post-install instructions
  5325. if ! grep -q "Wiki password" /home/$MY_USERNAME/README; then
  5326. echo '' >> /home/$MY_USERNAME/README
  5327. echo '' >> /home/$MY_USERNAME/README
  5328. echo 'Wiki' >> /home/$MY_USERNAME/README
  5329. echo '====' >> /home/$MY_USERNAME/README
  5330. echo "Wiki username: $MY_USERNAME" >> /home/$MY_USERNAME/README
  5331. echo "Wiki password: $WIKI_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  5332. echo '' >> /home/$MY_USERNAME/README
  5333. echo 'Once you have set up the wiki then remove the install file:' >> /home/$MY_USERNAME/README
  5334. echo '' >> /home/$MY_USERNAME/README
  5335. echo " rm /var/www/$WIKI_DOMAIN_NAME/htdocs/install.php" >> /home/$MY_USERNAME/README
  5336. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  5337. fi
  5338. echo 'install_wiki' >> $COMPLETION_FILE
  5339. }
  5340. function get_blog_admin_password {
  5341. if [ -f /home/$MY_USERNAME/README ]; then
  5342. if grep -q "Your blog password is" /home/$MY_USERNAME/README; then
  5343. FULLBLOG_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "Your blog password is" | awk -F ':' '{print $2}' | sed 's/^ *//')
  5344. fi
  5345. fi
  5346. }
  5347. function install_blog {
  5348. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  5349. return
  5350. fi
  5351. if ! grep -Fxq "random_number_generator" $COMPLETION_FILE; then
  5352. echo 'install_blog was called before the random number generator was initialised'
  5353. exit 853
  5354. fi
  5355. if grep -Fxq "install_blog" $COMPLETION_FILE; then
  5356. return
  5357. fi
  5358. if [ ! $FULLBLOG_DOMAIN_NAME ]; then
  5359. return
  5360. fi
  5361. if [ ! -d /var/www/$FULLBLOG_DOMAIN_NAME ]; then
  5362. mkdir /var/www/$FULLBLOG_DOMAIN_NAME
  5363. fi
  5364. cd /var/www/$FULLBLOG_DOMAIN_NAME
  5365. git clone https://github.com/danpros/htmly htdocs
  5366. chown -R www-data:www-data /var/www/$FULLBLOG_DOMAIN_NAME/htdocs
  5367. if [ ! -f /etc/ssl/private/$FULLBLOG_DOMAIN_NAME.key ]; then
  5368. makecert $FULLBLOG_DOMAIN_NAME
  5369. fi
  5370. echo 'server {' > /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5371. echo ' listen 80;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5372. echo " root /var/www/$FULLBLOG_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5373. echo " server_name $FULLBLOG_DOMAIN_NAME;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5374. echo ' access_log off;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5375. echo " error_log /var/log/nginx/$FULLBLOG_DOMAIN_NAME_error.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5376. echo ' index index.php;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5377. echo ' charset utf-8;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5378. echo ' client_max_body_size 20m;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5379. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5380. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5381. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5382. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5383. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5384. echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5385. echo ' location / {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5386. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5387. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5388. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5389. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5390. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5391. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5392. echo ' allow all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5393. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5394. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5395. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5396. echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5397. echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5398. echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5399. echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5400. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5401. echo ' expires 30d;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5402. echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5403. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5404. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5405. echo ' # block these file types' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5406. echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5407. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5408. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5409. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5410. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5411. echo ' # or a unix socket' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5412. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5413. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5414. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5415. echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5416. echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5417. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5418. echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5419. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5420. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5421. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5422. echo ' # With php5-cgi alone:' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5423. echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5424. echo ' # With php5-fpm:' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5425. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5426. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5427. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5428. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5429. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5430. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5431. echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5432. echo ' location ~ /\. {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5433. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5434. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5435. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5436. echo ' #deny access to store' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5437. echo ' location ~ /store {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5438. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5439. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5440. echo ' location ~ /(data|conf|bin|inc)/ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5441. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5442. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5443. echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5444. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5445. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5446. echo '}' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5447. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5448. echo 'server {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5449. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5450. echo " root /var/www/$FULLBLOG_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5451. echo " server_name $FULLBLOG_DOMAIN_NAME;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5452. echo ' access_log off;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5453. echo " error_log /var/log/nginx/$FULLBLOG_DOMAIN_NAME_error_ssl.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5454. echo ' index index.php;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5455. echo ' charset utf-8;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5456. echo ' client_max_body_size 20m;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5457. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5458. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5459. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5460. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5461. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5462. echo ' ssl on;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5463. echo " ssl_certificate /etc/ssl/certs/$FULLBLOG_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5464. echo " ssl_certificate_key /etc/ssl/private/$FULLBLOG_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5465. echo " ssl_dhparam /etc/ssl/certs/$FULLBLOG_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5466. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5467. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5468. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5469. echo ' ssl_session_cache builtin:1000 shared:SSL:10m;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5470. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5471. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5472. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5473. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5474. echo ' add_header Strict-Transport-Security "max-age=0;";' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5475. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5476. echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5477. echo ' location / {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5478. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5479. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5480. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5481. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5482. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5483. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5484. echo ' allow all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5485. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5486. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5487. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5488. echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5489. echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5490. echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5491. echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5492. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5493. echo ' expires 30d;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5494. echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5495. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5496. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5497. echo ' # block these file types' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5498. echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5499. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5500. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5501. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5502. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5503. echo ' # or a unix socket' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5504. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5505. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5506. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5507. echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5508. echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5509. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5510. echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5511. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5512. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5513. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5514. echo ' # With php5-cgi alone:' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5515. echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5516. echo ' # With php5-fpm:' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5517. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5518. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5519. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5520. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5521. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5522. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5523. echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5524. echo ' location ~ /\. {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5525. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5526. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5527. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5528. echo ' #deny access to store' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5529. echo ' location ~ /store {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5530. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5531. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5532. echo ' location ~ /(data|conf|bin|inc)/ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5533. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5534. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5535. echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5536. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5537. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5538. echo '}' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5539. configure_php
  5540. # blog settings
  5541. cp /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini.example /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini
  5542. sed -i "s|site.url.*|site.url = 'https://$FULLBLOG_DOMAIN_NAME'|g" /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini
  5543. sed -i "s|blog.title.*|blog.title = '$MY_BLOG_TITLE'|g" /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini
  5544. sed -i "s|blog.tagline.*|blog.tagline = '$MY_BLOG_SUBTITLE'|g" /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini
  5545. sed -i 's|timezone.*|timezone = "Europe/London"|g' /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini
  5546. sed -i "s|Your name|$MY_NAME|g" /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini
  5547. # create a user password
  5548. get_blog_admin_password
  5549. if [ ! $FULLBLOG_ADMIN_PASSWORD ]; then
  5550. FULLBLOG_ADMIN_PASSWORD=$(openssl rand -base64 16)
  5551. echo '' >> /home/$MY_USERNAME/README
  5552. echo '' >> /home/$MY_USERNAME/README
  5553. echo 'HTMLy Blog' >> /home/$MY_USERNAME/README
  5554. echo '==========' >> /home/$MY_USERNAME/README
  5555. echo "Your blog username: $MY_USERNAME" >> /home/$MY_USERNAME/README
  5556. echo "Your blog password is: $FULLBLOG_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  5557. echo "Log into your blog at https://$FULLBLOG_DOMAIN_NAME/login" >> /home/$MY_USERNAME/README
  5558. echo 'Edit your blog title and time zone at:' >> /home/$MY_USERNAME/README
  5559. echo " /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini" >> /home/$MY_USERNAME/README
  5560. echo '' >> /home/$MY_USERNAME/README
  5561. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  5562. fi
  5563. # create a user
  5564. cp /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/username.ini.example /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  5565. HASHED_BLOG_PASSWORD="$(echo -n $FULLBLOG_ADMIN_PASSWORD | sha256sum | awk -F ' ' '{print $1}')"
  5566. sed -i "s|yourpassword|$HASHED_BLOG_PASSWORD|g" /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  5567. sed -i 's/encryption = clear/encryption = "sha256"/g' /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  5568. nginx_ensite $FULLBLOG_DOMAIN_NAME
  5569. service php5-fpm restart
  5570. service nginx restart
  5571. # update the dynamic DNS
  5572. if [ $FULLBLOG_FREEDNS_SUBDOMAIN_CODE ]; then
  5573. if [[ $FULLBLOG_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  5574. if ! grep -q "$FULLBLOG_DOMAIN_NAME" /usr/bin/dynamicdns; then
  5575. echo "# $FULLBLOG_DOMAIN_NAME" >> /usr/bin/dynamicdns
  5576. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$FULLBLOG_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  5577. fi
  5578. fi
  5579. else
  5580. echo 'WARNING: No freeDNS subdomain code given for blog installation. It is assumed that you are using some other dynamic DNS provider.'
  5581. fi
  5582. echo 'install_blog' >> $COMPLETION_FILE
  5583. }
  5584. function install_gnu_social {
  5585. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  5586. return
  5587. fi
  5588. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  5589. return
  5590. fi
  5591. if ! grep -Fxq "random_number_generator" $COMPLETION_FILE; then
  5592. echo 'install_gnu_social was called before the random number generator was initialised'
  5593. exit 853
  5594. fi
  5595. if [ ! $MICROBLOG_DOMAIN_NAME ]; then
  5596. return
  5597. fi
  5598. install_mariadb
  5599. get_mariadb_password
  5600. repair_databases_script
  5601. apt-get -y --force-yes install php-gettext php5-curl php5-gd php5-mysql git curl php-xml-parser
  5602. if [ ! -d /var/www/$MICROBLOG_DOMAIN_NAME ]; then
  5603. mkdir /var/www/$MICROBLOG_DOMAIN_NAME
  5604. fi
  5605. if [ ! -d /var/www/$MICROBLOG_DOMAIN_NAME/htdocs ]; then
  5606. mkdir /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  5607. fi
  5608. cd $INSTALL_DIR
  5609. git clone $MICROBLOG_REPO gnusocial
  5610. rm -rf /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  5611. mv gnusocial /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  5612. chmod a+w /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  5613. chown www-data:www-data /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  5614. chmod a+w /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/avatar
  5615. chmod a+w /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/background
  5616. chmod a+w /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/file
  5617. chmod +x /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/scripts/maildaemon.php
  5618. get_mariadb_gnusocial_admin_password
  5619. if [ ! $MICROBLOG_ADMIN_PASSWORD ]; then
  5620. MICROBLOG_ADMIN_PASSWORD=$(openssl rand -base64 32)
  5621. echo '' >> /home/$MY_USERNAME/README
  5622. echo '' >> /home/$MY_USERNAME/README
  5623. echo 'GNU Social' >> /home/$MY_USERNAME/README
  5624. echo '==========' >> /home/$MY_USERNAME/README
  5625. echo "Your MariaDB gnusocial admin password is: $MICROBLOG_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  5626. echo '' >> /home/$MY_USERNAME/README
  5627. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  5628. fi
  5629. echo "create database gnusocial;
  5630. CREATE USER 'gnusocialadmin'@'localhost' IDENTIFIED BY '$MICROBLOG_ADMIN_PASSWORD';
  5631. GRANT ALL PRIVILEGES ON gnusocial.* TO 'gnusocialadmin'@'localhost';
  5632. quit" > $INSTALL_DIR/batch.sql
  5633. chmod 600 $INSTALL_DIR/batch.sql
  5634. mysql -u root --password="$MARIADB_PASSWORD" < $INSTALL_DIR/batch.sql
  5635. shred -zu $INSTALL_DIR/batch.sql
  5636. if [ ! -f "/etc/aliases" ]; then
  5637. touch /etc/aliases
  5638. fi
  5639. if grep -q "www-data: root" /etc/aliases; then
  5640. echo 'www-data: root' >> /etc/aliases
  5641. fi
  5642. if grep -q "/var/www/$MICROBLOG_DOMAIN_NAME/htdocs/scripts/maildaemon.php" /etc/aliases; then
  5643. echo "*: /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/scripts/maildaemon.php" >> /etc/aliases
  5644. fi
  5645. newaliases
  5646. # update the dynamic DNS
  5647. if [ $MICROBLOG_FREEDNS_SUBDOMAIN_CODE ]; then
  5648. if [[ $MICROBLOG_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  5649. if ! grep -q "$MICROBLOG_DOMAIN_NAME" /usr/bin/dynamicdns; then
  5650. echo "# $MICROBLOG_DOMAIN_NAME" >> /usr/bin/dynamicdns
  5651. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$MICROBLOG_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  5652. fi
  5653. fi
  5654. else
  5655. echo 'WARNING: No freeDNS subdomain code given for microblog. It is assumed that you are using some other dynamic DNS provider.'
  5656. fi
  5657. echo 'server {' > /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5658. echo ' listen 80;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5659. echo " server_name $MICROBLOG_DOMAIN_NAME;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5660. echo " root /var/www/$MICROBLOG_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5661. echo ' access_log off;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5662. echo " error_log /var/log/nginx/$MICROBLOG_DOMAIN_NAME_error.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5663. echo ' index index.php;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5664. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5665. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5666. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  5667. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5668. echo ' rewrite ^ https://$server_name$request_uri? permanent;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5669. echo '}' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5670. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5671. echo 'server {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5672. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5673. echo " server_name $MICROBLOG_DOMAIN_NAME;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5674. echo " root /var/www/$MICROBLOG_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5675. echo ' index index.php index.html index.htm;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5676. echo ' access_log off;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5677. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5678. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5679. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5680. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5681. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5682. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5683. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5684. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5685. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5686. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5687. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5688. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5689. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5690. echo ' fastcgi_read_timeout 300;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5691. echo ' }' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5692. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5693. echo ' ssl on;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5694. echo " ssl_certificate /etc/ssl/certs/$MICROBLOG_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5695. echo " ssl_certificate_key /etc/ssl/private/$MICROBLOG_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5696. echo " ssl_dhparam /etc/ssl/certs/$MICROBLOG_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5697. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5698. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5699. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5700. echo ' ssl_session_cache builtin:1000 shared:SSL:10m;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5701. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5702. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5703. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5704. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5705. echo ' add_header Strict-Transport-Security max-age=15768000;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5706. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5707. echo ' location / {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5708. echo ' rewrite ^(.*)$ /index.php?p=$1 last;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5709. echo ' break;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5710. echo ' }' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5711. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5712. echo ' location ~* ^/(.*)\.(ico|css|js|gif|png|jpg|bmp|JPG|jpeg)$ {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5713. echo " root /var/www/$MICROBLOG_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5714. echo ' rewrite ^/(.*)$ /$1 break;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5715. echo ' access_log off;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5716. echo ' expires max;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5717. echo ' }' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5718. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5719. echo ' client_max_body_size 15m;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5720. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5721. echo " error_log /var/log/nginx/$MICROBLOG_DOMAIN_NAME_error_ssl.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5722. echo '}' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  5723. configure_php
  5724. if [ ! -f /etc/ssl/private/$MICROBLOG_DOMAIN_NAME.key ]; then
  5725. makecert $MICROBLOG_DOMAIN_NAME
  5726. fi
  5727. # Ensure that the database gets backed up locally, if remote
  5728. # backups are not being used
  5729. backup_databases_script_header
  5730. echo '' >> /usr/bin/backupdatabases
  5731. echo '# Backup the GNU Social database' >> /usr/bin/backupdatabases
  5732. echo 'TEMPFILE=/root/gnusocial.sql' >> /usr/bin/backupdatabases
  5733. echo 'DAILYFILE=/var/backups/gnusocial_daily.sql' >> /usr/bin/backupdatabases
  5734. echo 'mysqldump --password="$MYSQL_PASSWORD" gnusocial > $TEMPFILE' >> /usr/bin/backupdatabases
  5735. echo 'FILESIZE=$(stat -c%s $TEMPFILE)' >> /usr/bin/backupdatabases
  5736. echo 'if [ "$FILESIZE" -eq "0" ]; then' >> /usr/bin/backupdatabases
  5737. echo ' if [ -f $DAILYFILE ]; then' >> /usr/bin/backupdatabases
  5738. echo ' cp $DAILYFILE $TEMPFILE' >> /usr/bin/backupdatabases
  5739. echo '' >> /usr/bin/backupdatabases
  5740. echo ' # try to restore yesterdays database' >> /usr/bin/backupdatabases
  5741. echo ' mysql -u root --password="$MYSQL_PASSWORD" gnusocial -o < $DAILYFILE' >> /usr/bin/backupdatabases
  5742. echo '' >> /usr/bin/backupdatabases
  5743. echo ' # Send a warning email' >> /usr/bin/backupdatabases
  5744. 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
  5745. echo ' else' >> /usr/bin/backupdatabases
  5746. echo ' # Send a warning email' >> /usr/bin/backupdatabases
  5747. echo ' echo "Unable to create a backup of the GNU Social database." | mail -s "GNU Social backup" $EMAIL' >> /usr/bin/backupdatabases
  5748. echo ' fi' >> /usr/bin/backupdatabases
  5749. echo 'else' >> /usr/bin/backupdatabases
  5750. echo ' chmod 600 $TEMPFILE' >> /usr/bin/backupdatabases
  5751. echo ' mv $TEMPFILE $DAILYFILE' >> /usr/bin/backupdatabases
  5752. echo '' >> /usr/bin/backupdatabases
  5753. echo ' # Make the backup readable only by root' >> /usr/bin/backupdatabases
  5754. echo ' chmod 600 $DAILYFILE' >> /usr/bin/backupdatabases
  5755. echo 'fi' >> /usr/bin/backupdatabases
  5756. echo '' >> /etc/cron.weekly/backupdatabasesweekly
  5757. echo '# GNU Social' >> /etc/cron.weekly/backupdatabasesweekly
  5758. echo 'if [ -f /var/backups/gnusocial_weekly.sql ]; then' >> /etc/cron.weekly/backupdatabasesweekly
  5759. echo ' cp -f /var/backups/gnusocial_weekly.sql /var/backups/gnusocial_2weekly.sql' >> /etc/cron.weekly/backupdatabasesweekly
  5760. echo 'fi' >> /etc/cron.weekly/backupdatabasesweekly
  5761. echo 'if [ -f /var/backups/gnusocial_daily.sql ]; then' >> /etc/cron.weekly/backupdatabasesweekly
  5762. echo ' cp -f /var/backups/gnusocial_daily.sql /var/backups/gnusocial_weekly.sql' >> /etc/cron.weekly/backupdatabasesweekly
  5763. echo 'fi' >> /etc/cron.weekly/backupdatabasesweekly
  5764. echo '' >> /etc/cron.monthly/backupdatabasesmonthly
  5765. echo '# GNU Social' >> /etc/cron.monthly/backupdatabasesmonthly
  5766. echo 'if [ -f /var/backups/gnusocial_monthly.sql ]; then' >> /etc/cron.monthly/backupdatabasesmonthly
  5767. echo ' cp -f /var/backups/gnusocial_monthly.sql /var/backups/gnusocial_2monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
  5768. echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
  5769. echo 'if [ -f /var/backups/gnusocial_weekly.sql ]; then' >> /etc/cron.monthly/backupdatabasesmonthly
  5770. echo ' cp -f /var/backups/gnusocial_weekly.sql /var/backups/gnusocial_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
  5771. echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
  5772. echo '/usr/bin/repairdatabase gnusocial' >> /etc/cron.hourly/repair
  5773. nginx_ensite $MICROBLOG_DOMAIN_NAME
  5774. service php5-fpm restart
  5775. service nginx restart
  5776. # some post-install instructions for the user
  5777. if ! grep -q "To set up your microblog" /home/$MY_USERNAME/README; then
  5778. echo '' >> /home/$MY_USERNAME/README
  5779. echo '' >> /home/$MY_USERNAME/README
  5780. echo 'Microblog' >> /home/$MY_USERNAME/README
  5781. echo '=========' >> /home/$MY_USERNAME/README
  5782. echo "To set up your microblog go to" >> /home/$MY_USERNAME/README
  5783. echo "https://$MICROBLOG_DOMAIN_NAME/install.php" >> /home/$MY_USERNAME/README
  5784. echo 'and enter the following settings:' >> /home/$MY_USERNAME/README
  5785. echo ' - Set a name for the site' >> /home/$MY_USERNAME/README
  5786. echo ' - Server SSL: enable' >> /home/$MY_USERNAME/README
  5787. echo ' - Hostname: localhost' >> /home/$MY_USERNAME/README
  5788. echo ' - Type: MySql/MariaDB' >> /home/$MY_USERNAME/README
  5789. echo ' - Name: gnusocial' >> /home/$MY_USERNAME/README
  5790. echo ' - DB username: root' >> /home/$MY_USERNAME/README
  5791. echo " - DB Password; $MARIADB_PASSWORD" >> /home/$MY_USERNAME/README
  5792. echo " - Administrator nickname: $MY_USERNAME" >> /home/$MY_USERNAME/README
  5793. echo " - Administrator password: $MICROBLOG_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  5794. echo ' - Subscribe to announcements: ticked' >> /home/$MY_USERNAME/README
  5795. echo ' - Site profile: Community' >> /home/$MY_USERNAME/README
  5796. echo '' >> /home/$MY_USERNAME/README
  5797. echo 'When the install is complete you will see a lot of warnings' >> /home/$MY_USERNAME/README
  5798. echo 'but just ignore those and navigate to ' >> /home/$MY_USERNAME/README
  5799. echo "https://$MICROBLOG_DOMAIN_NAME and you can then " >> /home/$MY_USERNAME/README
  5800. echo 'complete the configuration via the *Admin* section on the header' >> /home/$MY_USERNAME/README
  5801. echo 'bar. Some recommended admin settings are:' >> /home/$MY_USERNAME/README
  5802. echo '' >> /home/$MY_USERNAME/README
  5803. echo 'Under the *Site* settings:' >> /home/$MY_USERNAME/README
  5804. echo ' Text limit: 140' >> /home/$MY_USERNAME/README
  5805. echo ' Dupe Limit: 60000' >> /home/$MY_USERNAME/README
  5806. echo '' >> /home/$MY_USERNAME/README
  5807. echo 'Under the *User* settings:' >> /home/$MY_USERNAME/README
  5808. echo ' Bio limit: 1000' >> /home/$MY_USERNAME/README
  5809. echo '' >> /home/$MY_USERNAME/README
  5810. echo 'Under the *Access* settings:' >> /home/$MY_USERNAME/README
  5811. echo ' /Invite only/ ticked' >> /home/$MY_USERNAME/README
  5812. echo '' >> /home/$MY_USERNAME/README
  5813. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  5814. fi
  5815. echo 'install_gnu_social' >> $COMPLETION_FILE
  5816. }
  5817. function install_redmatrix {
  5818. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  5819. return
  5820. fi
  5821. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  5822. return
  5823. fi
  5824. if ! grep -Fxq "random_number_generator" $COMPLETION_FILE; then
  5825. echo 'install_redmatrix was called before the random number generator was initialised'
  5826. exit 853
  5827. fi
  5828. # if this is exclusively a social setup
  5829. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" ]]; then
  5830. REDMATRIX_DOMAIN_NAME=$DOMAIN_NAME
  5831. REDMATRIX_FREEDNS_SUBDOMAIN_CODE=$FREEDNS_SUBDOMAIN_CODE
  5832. fi
  5833. if [ ! $REDMATRIX_DOMAIN_NAME ]; then
  5834. return
  5835. fi
  5836. install_mariadb
  5837. get_mariadb_password
  5838. repair_databases_script
  5839. apt-get -y --force-yes install php5-common php5-cli php5-curl php5-gd php5-mysql php5-mcrypt git
  5840. if [ ! -d /var/www/$REDMATRIX_DOMAIN_NAME ]; then
  5841. mkdir /var/www/$REDMATRIX_DOMAIN_NAME
  5842. fi
  5843. if [ ! -d /var/www/$REDMATRIX_DOMAIN_NAME/htdocs ]; then
  5844. mkdir /var/www/$REDMATRIX_DOMAIN_NAME/htdocs
  5845. fi
  5846. if [ ! -f /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/index.php ]; then
  5847. cd $INSTALL_DIR
  5848. git clone $REDMATRIX_REPO redmatrix
  5849. rm -rf /var/www/$REDMATRIX_DOMAIN_NAME/htdocs
  5850. mv redmatrix /var/www/$REDMATRIX_DOMAIN_NAME/htdocs
  5851. chown -R www-data:www-data /var/www/$REDMATRIX_DOMAIN_NAME/htdocs
  5852. git clone $REDMATRIX_ADDONS_REPO /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/addon
  5853. # some extra themes
  5854. git clone https://github.com/DeadSuperHero/redmatrix-themes /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/redmatrix-themes1
  5855. cp -r /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/redmatrix-themes1/* view/theme/
  5856. fi
  5857. get_mariadb_redmatrix_admin_password
  5858. if [ ! $REDMATRIX_ADMIN_PASSWORD ]; then
  5859. REDMATRIX_ADMIN_PASSWORD=$(openssl rand -base64 32)
  5860. echo '' >> /home/$MY_USERNAME/README
  5861. echo '' >> /home/$MY_USERNAME/README
  5862. echo 'Red Matrix' >> /home/$MY_USERNAME/README
  5863. echo '==========' >> /home/$MY_USERNAME/README
  5864. echo "Your MariaDB Red Matrix admin password is: $REDMATRIX_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  5865. echo '' >> /home/$MY_USERNAME/README
  5866. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  5867. fi
  5868. echo "create database redmatrix;
  5869. CREATE USER 'redmatrixadmin'@'localhost' IDENTIFIED BY '$REDMATRIX_ADMIN_PASSWORD';
  5870. GRANT ALL PRIVILEGES ON redmatrix.* TO 'redmatrixadmin'@'localhost';
  5871. quit" > $INSTALL_DIR/batch.sql
  5872. chmod 600 $INSTALL_DIR/batch.sql
  5873. mysql -u root --password="$MARIADB_PASSWORD" < $INSTALL_DIR/batch.sql
  5874. shred -zu $INSTALL_DIR/batch.sql
  5875. if ! grep -q "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs" /etc/crontab; then
  5876. 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
  5877. fi
  5878. # update the dynamic DNS
  5879. if [ $REDMATRIX_FREEDNS_SUBDOMAIN_CODE ]; then
  5880. if [[ $REDMATRIX_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  5881. if ! grep -q "$REDMATRIX_DOMAIN_NAME" /usr/bin/dynamicdns; then
  5882. echo "# $REDMATRIX_DOMAIN_NAME" >> /usr/bin/dynamicdns
  5883. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$REDMATRIX_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  5884. fi
  5885. fi
  5886. else
  5887. echo 'WARNING: No freeDNS code given for Red Matrix. It is assumed that you are using some other dynamic DNS provider.'
  5888. fi
  5889. echo 'server {' > /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5890. echo ' listen 80;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5891. echo " server_name $REDMATRIX_DOMAIN_NAME;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5892. echo " root /var/www/$REDMATRIX_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5893. echo ' access_log off;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5894. echo " error_log /var/log/nginx/$REDMATRIX_DOMAIN_NAME_error.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5895. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5896. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5897. echo ' index index.php;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5898. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5899. echo ' rewrite ^ https://$server_name$request_uri? permanent;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5900. echo '}' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5901. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5902. echo 'server {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5903. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5904. echo " root /var/www/$REDMATRIX_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5905. echo " server_name $REDMATRIX_DOMAIN_NAME;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5906. echo " error_log /var/log/nginx/$REDMATRIX_DOMAIN_NAME_error_ssl.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5907. echo ' index index.php;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5908. echo ' charset utf-8;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5909. echo ' client_max_body_size 20m;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5910. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5911. echo ' access_log off;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5912. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5913. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5914. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5915. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5916. echo ' ssl on;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5917. echo " ssl_certificate /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5918. echo " ssl_certificate_key /etc/ssl/private/$REDMATRIX_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5919. echo " ssl_dhparam /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5920. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5921. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5922. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5923. echo ' ssl_session_cache builtin:1000 shared:SSL:10m;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5924. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5925. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5926. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5927. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5928. echo ' add_header Strict-Transport-Security max-age=15768000;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5929. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5930. echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5931. echo ' location / {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5932. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5933. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5934. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5935. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5936. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5937. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5938. echo ' allow all;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5939. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5940. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5941. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5942. echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5943. echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5944. echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5945. echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5946. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5947. echo ' expires 30d;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5948. echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5949. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5950. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5951. echo ' # block these file types' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5952. echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5953. echo ' deny all;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5954. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5955. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5956. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5957. echo ' # or a unix socket' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5958. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5959. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5960. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5961. echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5962. echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5963. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5964. echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5965. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5966. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5967. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5968. echo ' # With php5-cgi alone:' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5969. echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5970. echo ' # With php5-fpm:' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5971. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5972. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5973. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5974. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5975. echo ' fastcgi_read_timeout 300;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5976. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5977. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5978. echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5979. echo ' location ~ /\. {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5980. echo ' deny all;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5981. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5982. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5983. echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5984. echo ' deny all;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5985. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5986. echo '}' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  5987. configure_php
  5988. if [ ! -f /etc/ssl/private/$REDMATRIX_DOMAIN_NAME.key ]; then
  5989. makecert $REDMATRIX_DOMAIN_NAME
  5990. fi
  5991. if [ ! -d /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/view/tpl/smarty3 ]; then
  5992. mkdir /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/view/tpl/smarty3
  5993. fi
  5994. if [ ! -d "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store" ]; then
  5995. mkdir "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store"
  5996. fi
  5997. if [ ! -d "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]" ]; then
  5998. mkdir "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]"
  5999. fi
  6000. if [ ! -d "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]/smarty3" ]; then
  6001. mkdir "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]/smarty3"
  6002. chmod 777 "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]/smarty3"
  6003. fi
  6004. chmod 777 /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/view/tpl
  6005. chown -R www-data:www-data "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store"
  6006. chmod 777 /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/view/tpl/smarty3
  6007. # Ensure that the database gets backed up locally, if remote
  6008. # backups are not being used
  6009. backup_databases_script_header
  6010. echo '' >> /usr/bin/backupdatabases
  6011. echo '# Backup the Red Matrix database' >> /usr/bin/backupdatabases
  6012. echo 'TEMPFILE=/root/redmatrix.sql' >> /usr/bin/backupdatabases
  6013. echo 'DAILYFILE=/var/backups/redmatrix_daily.sql' >> /usr/bin/backupdatabases
  6014. echo 'mysqldump --password="$MYSQL_PASSWORD" redmatrix > $TEMPFILE' >> /usr/bin/backupdatabases
  6015. echo 'FILESIZE=$(stat -c%s $TEMPFILE)' >> /usr/bin/backupdatabases
  6016. echo 'if [ "$FILESIZE" -eq "0" ]; then' >> /usr/bin/backupdatabases
  6017. echo ' if [ -f $DAILYFILE ]; then' >> /usr/bin/backupdatabases
  6018. echo ' cp $DAILYFILE $TEMPFILE' >> /usr/bin/backupdatabases
  6019. echo '' >> /usr/bin/backupdatabases
  6020. echo ' # try to restore yesterdays database' >> /usr/bin/backupdatabases
  6021. echo ' mysql -u root --password="$MYSQL_PASSWORD" redmatrix -o < $DAILYFILE' >> /usr/bin/backupdatabases
  6022. echo '' >> /usr/bin/backupdatabases
  6023. echo ' # Send a warning email' >> /usr/bin/backupdatabases
  6024. 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
  6025. echo ' else' >> /usr/bin/backupdatabases
  6026. echo ' # Send a warning email' >> /usr/bin/backupdatabases
  6027. echo ' echo "Unable to create a backup of the Red Matrix database." | mail -s "Red Matrix backup" $EMAIL' >> /usr/bin/backupdatabases
  6028. echo ' fi' >> /usr/bin/backupdatabases
  6029. echo 'else' >> /usr/bin/backupdatabases
  6030. echo ' chmod 600 $TEMPFILE' >> /usr/bin/backupdatabases
  6031. echo ' mv $TEMPFILE $DAILYFILE' >> /usr/bin/backupdatabases
  6032. echo '' >> /usr/bin/backupdatabases
  6033. echo ' # Make the backup readable only by root' >> /usr/bin/backupdatabases
  6034. echo ' chmod 600 $DAILYFILE' >> /usr/bin/backupdatabases
  6035. echo 'fi' >> /usr/bin/backupdatabases
  6036. echo '' >> /etc/cron.weekly/backupdatabasesweekly
  6037. echo '# Red Matrix' >> /etc/cron.weekly/backupdatabasesweekly
  6038. echo 'if [ -f /var/backups/redmatrix_weekly.sql ]; then' >> /etc/cron.weekly/backupdatabasesweekly
  6039. echo ' cp -f /var/backups/redmatrix_weekly.sql /var/backups/redmatrix_2weekly.sql' >> /etc/cron.weekly/backupdatabasesweekly
  6040. echo 'fi' >> /etc/cron.weekly/backupdatabasesweekly
  6041. echo 'if [ -f /var/backups/redmatrix_daily.sql ]; then' >> /etc/cron.weekly/backupdatabasesweekly
  6042. echo ' cp -f /var/backups/redmatrix_daily.sql /var/backups/redmatrix_weekly.sql' >> /etc/cron.weekly/backupdatabasesweekly
  6043. echo 'fi' >> /etc/cron.weekly/backupdatabasesweekly
  6044. echo '' >> /etc/cron.monthly/backupdatabasesmonthly
  6045. echo '# Red Matrix' >> /etc/cron.monthly/backupdatabasesmonthly
  6046. echo 'if [ -f /var/backups/redmatrix_monthly.sql ]; then' >> /etc/cron.monthly/backupdatabasesmonthly
  6047. echo ' cp -f /var/backups/redmatrix_monthly.sql /var/backups/redmatrix_2monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
  6048. echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
  6049. echo 'if [ -f /var/backups/redmatrix_weekly.sql ]; then' >> /etc/cron.monthly/backupdatabasesmonthly
  6050. echo ' cp -f /var/backups/redmatrix_weekly.sql /var/backups/redmatrix_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
  6051. echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
  6052. echo '/usr/bin/repairdatabase redmatrix' >> /etc/cron.hourly/repair
  6053. nginx_ensite $REDMATRIX_DOMAIN_NAME
  6054. service php5-fpm restart
  6055. service nginx restart
  6056. service cron restart
  6057. # some post-install instructions for the user
  6058. if ! grep -q "To set up your Red Matrix" /home/$MY_USERNAME/README; then
  6059. echo '' >> /home/$MY_USERNAME/README
  6060. echo "To set up your Red Matrix site go to" >> /home/$MY_USERNAME/README
  6061. echo "https://$REDMATRIX_DOMAIN_NAME" >> /home/$MY_USERNAME/README
  6062. echo 'You will need to have a non self-signed SSL certificate in order' >> /home/$MY_USERNAME/README
  6063. echo "to use Red Matrix. Put the public certificate in /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.crt" >> /home/$MY_USERNAME/README
  6064. echo "and the private certificate in /etc/ssl/private/$REDMATRIX_DOMAIN_NAME.key." >> /home/$MY_USERNAME/README
  6065. echo 'If there is an intermediate certificate needed (such as with StartSSL) then' >> /home/$MY_USERNAME/README
  6066. echo 'this will need to be concatenated onto the end of the crt file, like this:' >> /home/$MY_USERNAME/README
  6067. echo '' >> /home/$MY_USERNAME/README
  6068. 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
  6069. echo '' >> /home/$MY_USERNAME/README
  6070. echo "Then change ssl_certificate to /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.bundle.crt" >> /home/$MY_USERNAME/README
  6071. echo "within /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME" >> /home/$MY_USERNAME/README
  6072. echo '' >> /home/$MY_USERNAME/README
  6073. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  6074. fi
  6075. echo 'install_redmatrix' >> $COMPLETION_FILE
  6076. }
  6077. function script_for_attaching_usb_drive {
  6078. if grep -Fxq "script_for_attaching_usb_drive" $COMPLETION_FILE; then
  6079. return
  6080. fi
  6081. echo '#!/bin/bash' > /usr/bin/attach-music
  6082. echo 'remove-music' >> /usr/bin/attach-music
  6083. echo "if [ ! -d $USB_MOUNT ]; then" >> /usr/bin/attach-music
  6084. echo " mkdir $USB_MOUNT" >> /usr/bin/attach-music
  6085. echo 'fi' >> /usr/bin/attach-music
  6086. echo "mount /dev/sda1 $USB_MOUNT" >> /usr/bin/attach-music
  6087. echo "chown root:root $USB_MOUNT" >> /usr/bin/attach-music
  6088. echo "chown -R minidlna:minidlna $USB_MOUNT/*" >> /usr/bin/attach-music
  6089. echo 'service minidlna restart' >> /usr/bin/attach-music
  6090. echo 'minidlnad -R' >> /usr/bin/attach-music
  6091. chmod +x /usr/bin/attach-music
  6092. ln -s /usr/bin/attach-music /usr/bin/attach-usb
  6093. ln -s /usr/bin/attach-music /usr/bin/attach-videos
  6094. ln -s /usr/bin/attach-music /usr/bin/attach-pictures
  6095. ln -s /usr/bin/attach-music /usr/bin/attach-media
  6096. echo '#!/bin/bash' > /usr/bin/remove-music
  6097. echo "if [ -d $USB_MOUNT ]; then" >> /usr/bin/remove-music
  6098. echo " umount $USB_MOUNT" >> /usr/bin/remove-music
  6099. echo " rm -rf $USB_MOUNT" >> /usr/bin/remove-music
  6100. echo 'fi' >> /usr/bin/remove-music
  6101. chmod +x /usr/bin/remove-music
  6102. ln -s /usr/bin/remove-music /usr/bin/detach-music
  6103. ln -s /usr/bin/remove-music /usr/bin/detach-usb
  6104. ln -s /usr/bin/remove-music /usr/bin/remove-usb
  6105. ln -s /usr/bin/remove-music /usr/bin/detach-media
  6106. ln -s /usr/bin/remove-music /usr/bin/remove-media
  6107. ln -s /usr/bin/remove-music /usr/bin/detach-videos
  6108. ln -s /usr/bin/remove-music /usr/bin/remove-videos
  6109. ln -s /usr/bin/remove-music /usr/bin/detach-pictures
  6110. ln -s /usr/bin/remove-music /usr/bin/remove-pictures
  6111. echo 'script_for_attaching_usb_drive' >> $COMPLETION_FILE
  6112. }
  6113. function install_dlna_server {
  6114. if grep -Fxq "install_dlna_server" $COMPLETION_FILE; then
  6115. return
  6116. fi
  6117. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  6118. return
  6119. fi
  6120. apt-get -y --force-yes install minidlna
  6121. if [ ! -f /etc/minidlna.conf ]; then
  6122. echo "ERROR: minidlna does not appear to have installed. $CHECK_MESSAGE"
  6123. exit 55
  6124. fi
  6125. sed -i "s|media_dir=/var/lib/minidlna|media_dir=A,/home/$MY_USERNAME/Music|g" /etc/minidlna.conf
  6126. if ! grep -q "/home/$MY_USERNAME/Pictures" /etc/minidlna.conf; then
  6127. echo "media_dir=P,/home/$MY_USERNAME/Pictures" >> /etc/minidlna.conf
  6128. fi
  6129. if ! grep -q "/home/$MY_USERNAME/Videos" /etc/minidlna.conf; then
  6130. echo "media_dir=V,/home/$MY_USERNAME/Videos" >> /etc/minidlna.conf
  6131. fi
  6132. if ! grep -q "$USB_MOUNT/Music" /etc/minidlna.conf; then
  6133. echo "media_dir=A,$USB_MOUNT/Music" >> /etc/minidlna.conf
  6134. fi
  6135. if ! grep -q "$USB_MOUNT/Pictures" /etc/minidlna.conf; then
  6136. echo "media_dir=P,$USB_MOUNT/Pictures" >> /etc/minidlna.conf
  6137. fi
  6138. if ! grep -q "$USB_MOUNT/Videos" /etc/minidlna.conf; then
  6139. echo "media_dir=V,$USB_MOUNT/Videos" >> /etc/minidlna.conf
  6140. fi
  6141. sed -i 's/#root_container=./root_container=B/g' /etc/minidlna.conf
  6142. sed -i 's/#network_interface=/network_interface=eth0/g' /etc/minidlna.conf
  6143. sed -i 's/#friendly_name=/friendly_name="Freedombone Media"/g' /etc/minidlna.conf
  6144. sed -i 's|#db_dir=/var/cache/minidlna|db_dir=/var/cache/minidlna|g' /etc/minidlna.conf
  6145. sed -i 's/#inotify=yes/inotify=yes/g' /etc/minidlna.conf
  6146. sed -i 's/#notify_interval=895/notify_interval=300/g' /etc/minidlna.conf
  6147. sed -i "s|#presentation_url=/|presentation_url=http://localhost:8200|g" /etc/minidlna.conf
  6148. service minidlna force-reload
  6149. service minidlna reload
  6150. sed -i 's/fs.inotify.max_user_watches*/fs.inotify.max_user_watches=65536/g' /etc/sysctl.conf
  6151. if ! grep -q "max_user_watches" $COMPLETION_FILE; then
  6152. echo 'fs.inotify.max_user_watches=65536' >> /etc/sysctl.conf
  6153. fi
  6154. /sbin/sysctl -p
  6155. echo 'install_dlna_server' >> $COMPLETION_FILE
  6156. }
  6157. function install_mediagoblin {
  6158. # These instructions don't work and need fixing
  6159. return
  6160. if grep -Fxq "install_mediagoblin" $COMPLETION_FILE; then
  6161. return
  6162. fi
  6163. 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" || $SYSTEM_TYPE == "$VARIANT_TOR_WIFI" ]]; then
  6164. return
  6165. fi
  6166. # if this is exclusively a writer setup
  6167. if [[ $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  6168. MEDIAGOBLIN_DOMAIN_NAME=$DOMAIN_NAME
  6169. MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE=$FREEDNS_SUBDOMAIN_CODE
  6170. fi
  6171. if [ ! $MEDIAGOBLIN_DOMAIN_NAME ]; then
  6172. return
  6173. fi
  6174. apt-get -y --force-yes install git-core python python-dev python-lxml python-imaging python-virtualenv
  6175. 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
  6176. apt-get -y --force-yes install postgresql postgresql-client python-psycopg2 python-pip autotools-dev automake
  6177. sudo -u postgres createuser -A -D mediagoblin
  6178. sudo -u postgres createdb -E UNICODE -O mediagoblin mediagoblin
  6179. adduser --system mediagoblin
  6180. MEDIAGOBLIN_DOMAIN_ROOT="/srv/$MEDIAGOBLIN_DOMAIN_NAME"
  6181. MEDIAGOBLIN_PATH="$MEDIAGOBLIN_DOMAIN_ROOT/mediagoblin"
  6182. MEDIAGOBLIN_PATH_BIN="$MEDIAGOBLIN_PATH/mediagoblin/bin"
  6183. if [ ! -d $MEDIAGOBLIN_DOMAIN_ROOT ]; then
  6184. mkdir -p $MEDIAGOBLIN_DOMAIN_ROOT
  6185. fi
  6186. cd $MEDIAGOBLIN_DOMAIN_ROOT
  6187. chown -hR mediagoblin: $MEDIAGOBLIN_DOMAIN_ROOT
  6188. su -c "cd $MEDIAGOBLIN_DOMAIN_ROOT; git clone git://gitorious.org/mediagoblin/mediagoblin.git" - mediagoblin
  6189. su -c "cd $MEDIAGOBLIN_PATH; git submodule init" - mediagoblin
  6190. su -c "cd $MEDIAGOBLIN_PATH; git submodule update" - mediagoblin
  6191. #su -c 'cd $MEDIAGOBLIN_PATH; ./experimental-bootstrap.sh' - mediagoblin
  6192. #su -c 'cd $MEDIAGOBLIN_PATH; ./configure' - mediagoblin
  6193. #su -c 'cd $MEDIAGOBLIN_PATH; make' - mediagoblin
  6194. su -c "cd $MEDIAGOBLIN_PATH; virtualenv --system-site-packages ." - mediagoblin
  6195. su -c "cd $MEDIAGOBLIN_PATH_BIN; python setup.py develop" - mediagoblin
  6196. su -c "cp $MEDIAGOBLIN_PATH/mediagoblin.ini $MEDIAGOBLIN_PATH/mediagoblin_local.ini" - mediagoblin
  6197. su -c "cp $MEDIAGOBLIN_PATH/paste.ini $MEDIAGOBLIN_PATH/paste_local.ini" - mediagoblin
  6198. # update the dynamic DNS
  6199. if [ $MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE ]; then
  6200. if [[ $MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  6201. if ! grep -q "$MEDIAGOBLIN_DOMAIN_NAME" /usr/bin/dynamicdns; then
  6202. echo "# $MEDIAGOBLIN_DOMAIN_NAME" >> /usr/bin/dynamicdns
  6203. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  6204. fi
  6205. fi
  6206. else
  6207. echo 'WARNING: No freeDNS subdomain code given for mediagoblin. It is assumed that you are using some other dynamic DNS provider.'
  6208. fi
  6209. # see https://wiki.mediagoblin.org/Deployment / uwsgi with configs
  6210. apt-get -y --force-yes install uwsgi uwsgi-plugin-python nginx-full supervisor
  6211. echo 'server {' > /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6212. echo ' include /etc/nginx/mime.types;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6213. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6214. echo ' autoindex off;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6215. echo ' default_type application/octet-stream;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6216. echo ' sendfile on;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6217. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6218. echo ' # Gzip' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6219. echo ' gzip on;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6220. echo ' gzip_min_length 1024;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6221. echo ' gzip_buffers 4 32k;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6222. echo ' gzip_types text/plain text/html application/x-javascript text/javascript text/xml text/css;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6223. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6224. echo " server_name $MEDIAGOBLIN_DOMAIN_NAME;" >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6225. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6226. echo ' error_log /var/log/nginx/mg.error.log error;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6227. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6228. echo ' #include global/common.conf;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6229. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6230. echo ' client_max_body_size 100m;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6231. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6232. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6233. echo " root $MEDIAGOBLIN_PATH/;" >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6234. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6235. echo ' location /mgoblin_static/ {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6236. echo " alias $MEDIAGOBLIN_PATH/static/;" >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6237. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6238. echo ' location /mgoblin_media/ {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6239. echo " alias $MEDIAGOBL_PATH/media/public/;" >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6240. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6241. echo ' location /theme_static/ {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6242. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6243. echo ' location /plugin_static/ {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6244. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6245. echo ' location / {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6246. echo ' uwsgi_pass unix:///tmp/mg.uwsgi.sock;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6247. echo ' uwsgi_param SCRIPT_NAME "/";' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6248. echo ' include uwsgi_params;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6249. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6250. echo '}' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  6251. echo 'uwsgi:' > /etc/uwsgi/apps-available/mg.yaml
  6252. echo ' uid: mediagoblin' >> /etc/uwsgi/apps-available/mg.yaml
  6253. echo ' gid: mediagoblin' >> /etc/uwsgi/apps-available/mg.yaml
  6254. echo ' socket: /tmp/mg.uwsgi.sock' >> /etc/uwsgi/apps-available/mg.yaml
  6255. echo ' chown-socket: www-data:www-data' >> /etc/uwsgi/apps-available/mg.yaml
  6256. echo ' plugins: python' >> /etc/uwsgi/apps-available/mg.yaml
  6257. echo " home: $MEDIAGOBLIN_PATH/" >> /etc/uwsgi/apps-available/mg.yaml
  6258. echo " chdir: $MEDIAGOBLIN_PATH/" >> /etc/uwsgi/apps-available/mg.yaml
  6259. echo " ini-paste: $MEDIAGOBLIN_PATH/paste_local.ini" >> /etc/uwsgi/apps-available/mg.yaml
  6260. echo '[program:celery]' > /etc/supervisor/conf.d/mediagoblin.conf
  6261. echo "command=$MEDIAGOBLIN_PATH_BIN/celery worker -l debug" >> /etc/supervisor/conf.d/mediagoblin.conf
  6262. echo '' >> /etc/supervisor/conf.d/mediagoblin.conf
  6263. echo '; Set PYTHONPATH to the directory containing celeryconfig.py' >> /etc/supervisor/conf.d/mediagoblin.conf
  6264. 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
  6265. echo '' >> /etc/supervisor/conf.d/mediagoblin.conf
  6266. echo "directory=$MEDIAGOBLIN_PATH/" >> /etc/supervisor/conf.d/mediagoblin.conf
  6267. echo 'user=mediagoblin' >> /etc/supervisor/conf.d/mediagoblin.conf
  6268. echo 'numprocs=1' >> /etc/supervisor/conf.d/mediagoblin.conf
  6269. echo '; uncomment below to enable logs saving' >> /etc/supervisor/conf.d/mediagoblin.conf
  6270. echo ";stdout_logfile=/var/log/nginx/celeryd_stdout.log" >> /etc/supervisor/conf.d/mediagoblin.conf
  6271. echo ";stderr_logfile=/var/log/nginx/celeryd_stderr.log" >> /etc/supervisor/conf.d/mediagoblin.conf
  6272. echo 'autostart=true' >> /etc/supervisor/conf.d/mediagoblin.conf
  6273. echo 'autorestart=false' >> /etc/supervisor/conf.d/mediagoblin.conf
  6274. echo 'startsecs=10' >> /etc/supervisor/conf.d/mediagoblin.conf
  6275. echo '' >> /etc/supervisor/conf.d/mediagoblin.conf
  6276. echo '; Need to wait for currently executing tasks to finish at shutdown.' >> /etc/supervisor/conf.d/mediagoblin.conf
  6277. echo '; Increase this if you have very long running tasks.' >> /etc/supervisor/conf.d/mediagoblin.conf
  6278. echo 'stopwaitsecs = 600' >> /etc/supervisor/conf.d/mediagoblin.conf
  6279. ln -s /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME /etc/nginx/sites-enabled/
  6280. ln -s /etc/uwsgi/apps-available/mg.yaml /etc/uwsgi/apps-enabled/
  6281. # change settings
  6282. sed -i "s/notice@mediagoblin.example.org/$MY_EMAIL_ADDRESS/g" $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  6283. sed -i 's/email_debug_mode = true/email_debug_mode = false/g' $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  6284. sed -i 's|# sql_engine = postgresql:///mediagoblin|sql_engine = postgresql:///mediagoblin|g' $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  6285. # add extra media types
  6286. if grep -q "media_types.audio" $MEDIAGOBLIN_PATH/mediagoblin_local.ini; then
  6287. echo '[[mediagoblin.media_types.audio]]' >> $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  6288. fi
  6289. if grep -q "media_types.video" $MEDIAGOBLIN_PATH/mediagoblin_local.ini; then
  6290. echo '[[mediagoblin.media_types.video]]' >> $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  6291. fi
  6292. if grep -q "media_types.stl" $MEDIAGOBLIN_PATH/mediagoblin_local.ini; then
  6293. echo '[[mediagoblin.media_types.stl]]' >> $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  6294. fi
  6295. su -c "cd $MEDIAGOBLIN_PATH_BIN; pip install scikits.audiolab" - mediagoblin
  6296. su -c "cd $MEDIAGOBLIN_PATH_BIN; gmg dbupdate" - mediagoblin
  6297. # systemd init scripts
  6298. echo '[Unit]' > /etc/systemd/system/gmg.service
  6299. echo 'Description=Mediagoblin' >> /etc/systemd/system/gmg.service
  6300. echo '' >> /etc/systemd/system/gmg.service
  6301. echo '[Service]' >> /etc/systemd/system/gmg.service
  6302. echo 'Type=forking' >> /etc/systemd/system/gmg.service
  6303. echo 'User=mediagoblin' >> /etc/systemd/system/gmg.service
  6304. echo 'Group=mediagoblin' >> /etc/systemd/system/gmg.service
  6305. echo '#Environment=CELERY_ALWAYS_EAGER=true' >> /etc/systemd/system/gmg.service
  6306. echo 'Environment=CELERY_ALWAYS_EAGER=false' >> /etc/systemd/system/gmg.service
  6307. echo "WorkingDirectory=$MEDIAGOBLIN_PATH" >> /etc/systemd/system/gmg.service
  6308. 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
  6309. 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
  6310. echo 'PIDFile=/var/run/mediagoblin/mediagoblin.pid' >> /etc/systemd/system/gmg.service
  6311. echo '' >> /etc/systemd/system/gmg.service
  6312. echo '[Install]' >> /etc/systemd/system/gmg.service
  6313. echo 'WantedBy=multi-user.target' >> /etc/systemd/system/gmg.service
  6314. echo '[Unit]' > /etc/systemd/system/gmg-celeryd.service
  6315. echo 'Description=Mediagoblin Celeryd' >> /etc/systemd/system/gmg-celeryd.service
  6316. echo '' >> /etc/systemd/system/gmg-celeryd.service
  6317. echo '[Service]' >> /etc/systemd/system/gmg-celeryd.service
  6318. echo 'User=mediagoblin' >> /etc/systemd/system/gmg-celeryd.service
  6319. echo 'Group=mediagoblin' >> /etc/systemd/system/gmg-celeryd.service
  6320. echo 'Type=simple' >> /etc/systemd/system/gmg-celeryd.service
  6321. echo "WorkingDirectory=$MEDIAGOBLIN_PATH" >> /etc/systemd/system/gmg-celeryd.service
  6322. echo "Environment='MEDIAGOBLIN_CONFIG=$MEDIAGOBLIN_PATH/mediagoblin_local.ini' CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery" >> /etc/systemd/system/gmg-celeryd.service
  6323. echo "ExecStart=$MEDIAGOBLIN_PATH_BIN/celeryd" >> /etc/systemd/system/gmg-celeryd.service
  6324. echo 'PIDFile=/var/run/mediagoblin/mediagoblin-celeryd.pid' >> /etc/systemd/system/gmg-celeryd.service
  6325. echo '' >> /etc/systemd/system/gmg-celeryd.service
  6326. echo '[Install]' >> /etc/systemd/system/gmg-celeryd.service
  6327. echo 'WantedBy=multi-user.target' >> /etc/systemd/system/gmg-celeryd.service
  6328. systemctl start gmg.service
  6329. systemctl start gmg-celeryd.service
  6330. echo 'install_mediagoblin' >> $COMPLETION_FILE
  6331. }
  6332. function create_upgrade_script {
  6333. if grep -Fxq "create_upgrade_script" $COMPLETION_FILE; then
  6334. return
  6335. fi
  6336. echo '#!/bin/bash' > /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6337. echo '' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6338. echo 'apt-get -y update' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6339. echo 'apt-get -y --force-yes upgrade' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6340. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  6341. echo "cd /var/www/$REDMATRIX_DOMAIN_NAME/htdocs" >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6342. echo 'git stash' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6343. echo 'git stash drop' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6344. echo 'git pull' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6345. echo "cd /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/addon" >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6346. echo 'git stash' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6347. echo 'git stash drop' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6348. echo 'git pull' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6349. fi
  6350. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  6351. echo "cd /var/www/$MICROBLOG_DOMAIN_NAME/htdocs" >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6352. echo 'git stash' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6353. echo 'git stash drop' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6354. echo 'git pull' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6355. fi
  6356. if grep -Fxq "install_blog" $COMPLETION_FILE; then
  6357. echo "cd /var/www/$FULLBLOG_DOMAIN_NAME/htdocs" >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6358. echo 'git stash' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6359. echo 'git stash drop' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6360. echo 'git pull' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6361. fi
  6362. if grep -Fxq "install_owncloud_music_app" $COMPLETION_FILE; then
  6363. echo "cd /usr/share/owncloud/apps/music" >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6364. echo 'git stash' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6365. echo 'git stash drop' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6366. echo 'git pull' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6367. fi
  6368. echo 'exit 0' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6369. chmod +x /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  6370. echo 'create_upgrade_script' >> $COMPLETION_FILE
  6371. }
  6372. function intrusion_detection {
  6373. if grep -Fxq "intrusion_detection" $COMPLETION_FILE; then
  6374. return
  6375. fi
  6376. apt-get -y --force-yes install tripwire
  6377. apt-get -y --force-yes autoremove
  6378. cd /etc/tripwire
  6379. cp site.key $DOMAIN_NAME-site.key
  6380. echo ''
  6381. echo ''
  6382. echo '*** Installing intrusion detection. Press Enter when asked for the local and site passphrases. ***'
  6383. echo ''
  6384. echo ''
  6385. tripwire --init
  6386. # make a script for easy resetting of the tripwire
  6387. echo '#!/bin/sh' > /usr/bin/reset-tripwire
  6388. echo 'tripwire --update-policy --secure-mode low /etc/tripwire/twpol.txt' >> /usr/bin/reset-tripwire
  6389. chmod +x /usr/bin/reset-tripwire
  6390. reset-tripwire
  6391. sed -i 's/SYSLOGREPORTING =true/#SYSLOGREPORTING =false/g' /etc/tripwire/twcfg.txt
  6392. sed -i '/# These files change the behavior of the root account/,/}/ s/.*//g' /etc/tripwire/twpol.txt
  6393. reset-tripwire
  6394. echo 'intrusion_detection' >> $COMPLETION_FILE
  6395. }
  6396. # see http://adammelton.com/tor_dongle.php
  6397. # Attach the BeagleBone to a PC via USB and then have an enthernet
  6398. # connection to the internet router
  6399. function create_tor_dongle {
  6400. if grep -Fxq "create_tor_dongle" $COMPLETION_FILE; then
  6401. return
  6402. fi
  6403. if [[ $SYSTEM_TYPE != "$VARIANT_TOR_DONGLE" ]]; then
  6404. return
  6405. fi
  6406. apt-get -y --force-yes install tor tor-arm
  6407. # firewall
  6408. iptables -A INPUT -i usb0 -p tcp --dport 9050 -j ACCEPT
  6409. iptables -A INPUT -i usb0 -p tcp --dport 9051 -j ACCEPT
  6410. save_firewall_settings
  6411. # tor settings
  6412. sed -i "s/#SocksPort 192.168.0.1:9100/SocksPort 192.168.7.2:9050/g" /etc/tor/torrc
  6413. sed -i 's/#ControlPort 9051/ControlPort 9051/g' /etc/tor/torrc
  6414. sed -i 's/#CookieAuthentication 1/CookieAuthentication 1/g' /etc/tor/torrc
  6415. if ! grep -q "DisableDebuggerAttachment" /etc/tor/torrc; then
  6416. echo 'DisableDebuggerAttachment 0' >> /etc/tor/torrc
  6417. fi
  6418. # ensure that USB networking is enabled
  6419. echo '# The loopback network interface' > /etc/network/interfaces
  6420. echo 'auto lo' >> /etc/network/interfaces
  6421. echo 'iface lo inet loopback' >> /etc/network/interfaces
  6422. echo '' >> /etc/network/interfaces
  6423. echo '# The primary network interface' >> /etc/network/interfaces
  6424. echo 'auto eth0' >> /etc/network/interfaces
  6425. echo 'iface eth0 inet dhcp' >> /etc/network/interfaces
  6426. echo '' >> /etc/network/interfaces
  6427. echo '# USB network interface' >> /etc/network/interfaces
  6428. echo 'iface usb0 inet static' >> /etc/network/interfaces
  6429. echo ' address 192.168.7.2' >> /etc/network/interfaces
  6430. echo ' netmask 255.255.255.0' >> /etc/network/interfaces
  6431. echo ' network 192.168.7.0' >> /etc/network/interfaces
  6432. echo ' gateway 192.168.7.1' >> /etc/network/interfaces
  6433. if ! grep -q "Tor Dongle" /home/$MY_USERNAME/README; then
  6434. echo '' >> /home/$MY_USERNAME/README
  6435. echo '' >> /home/$MY_USERNAME/README
  6436. echo 'Tor Dongle' >> /home/$MY_USERNAME/README
  6437. echo '==========' >> /home/$MY_USERNAME/README
  6438. echo 'Connect your PC to the Beaglebone via the USB cable' >> /home/$MY_USERNAME/README
  6439. echo 'and the Beaglebone ethernet to your internet router.' >> /home/$MY_USERNAME/README
  6440. echo '' >> /home/$MY_USERNAME/README
  6441. echo 'Within your network proxy settings set the SOCKS host' >> /home/$MY_USERNAME/README
  6442. echo 'to 192.168.7.2 and the port to 9050, with remote' >> /home/$MY_USERNAME/README
  6443. echo 'DNS enabled. There should be no proxying for localhost' >> /home/$MY_USERNAME/README
  6444. echo 'and 127.0.0.1' >> /home/$MY_USERNAME/README
  6445. fi
  6446. echo 'Freedombone Tor Dongle installation is complete'
  6447. cat /home/$MY_USERNAME/README
  6448. service networking restart
  6449. service tor restart
  6450. exit 873
  6451. }
  6452. # see https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy
  6453. # Local Redirection and Anonymizing Middlebox
  6454. function route_outgoing_traffic_through_tor {
  6455. if grep -Fxq "route_outgoing_traffic_through_tor" $COMPLETION_FILE; then
  6456. return
  6457. fi
  6458. if [[ $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  6459. return
  6460. fi
  6461. if [[ $ROUTE_THROUGH_TOR != "yes" ]]; then
  6462. return
  6463. fi
  6464. apt-get -y --force-yes install tor tor-arm
  6465. ### set variables
  6466. # Destinations you don't want routed through Tor
  6467. _non_tor="192.168.1.0/24 192.168.0.0/24"
  6468. # The user that Tor runs as
  6469. _tor_uid="debian-tor"
  6470. # Tor's TransPort
  6471. _trans_port="9040"
  6472. # Your internal interface
  6473. _int_if="eth0"
  6474. ### Set iptables *nat
  6475. iptables -t nat -A OUTPUT -o lo -j RETURN
  6476. iptables -t nat -A OUTPUT -m owner --uid-owner $_tor_uid -j RETURN
  6477. iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 53
  6478. # Allow clearnet access for hosts in $_non_tor
  6479. for _clearnet in $_non_tor; do
  6480. iptables -t nat -A OUTPUT -d $_clearnet -j RETURN
  6481. iptables -t nat -A PREROUTING -i $_int_if -d $_clearnet -j RETURN
  6482. done
  6483. # Redirect all other pre-routing and output to Tor
  6484. iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $_trans_port
  6485. iptables -t nat -A PREROUTING -i $_int_if -p udp --dport 53 -j REDIRECT --to-ports 53
  6486. iptables -t nat -A PREROUTING -i $_int_if -p tcp --syn -j REDIRECT --to-ports $_trans_port
  6487. ### set iptables *filter
  6488. iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  6489. # Allow clearnet access for hosts in $_non_tor
  6490. for _clearnet in $_non_tor 127.0.0.0/8; do
  6491. iptables -A OUTPUT -d $_clearnet -j ACCEPT
  6492. done
  6493. # Allow only Tor output
  6494. iptables -A OUTPUT -m owner --uid-owner $_tor_uid -j ACCEPT
  6495. iptables -A OUTPUT -j REJECT
  6496. save_firewall_settings
  6497. if ! grep -q "fs.file-max" /etc/sysctl.conf; then
  6498. echo "fs.file-max=100000" >> /etc/sysctl.conf
  6499. /sbin/sysctl -p
  6500. fi
  6501. echo 'domain localdomain' > /etc/resolv.conf
  6502. echo 'search localdomain' >> /etc/resolv.conf
  6503. echo 'nameserver 127.0.0.1' >> /etc/resolv.conf
  6504. if ! grep -q "VirtualAddrNetworkIPv4" /etc/tor/torrc; then
  6505. echo 'VirtualAddrNetworkIPv4 10.192.0.0/10' >> /etc/tor/torrc
  6506. fi
  6507. if ! grep -q "AutomapHostsOnResolve" /etc/tor/torrc; then
  6508. echo 'AutomapHostsOnResolve 1' >> /etc/tor/torrc
  6509. fi
  6510. if ! grep -q "TransPort" /etc/tor/torrc; then
  6511. echo 'TransPort 9040' >> /etc/tor/torrc
  6512. fi
  6513. if ! grep -q "TransListenAddress 127.0.0.1" /etc/tor/torrc; then
  6514. echo 'TransListenAddress 127.0.0.1' >> /etc/tor/torrc
  6515. fi
  6516. if ! grep -q "TransListenAddress $LOCAL_NETWORK_STATIC_IP_ADDRESS" /etc/tor/torrc; then
  6517. echo "TransListenAddress $LOCAL_NETWORK_STATIC_IP_ADDRESS" >> /etc/tor/torrc
  6518. fi
  6519. if ! grep -q "DNSPort" /etc/tor/torrc; then
  6520. echo 'DNSPort 53' >> /etc/tor/torrc
  6521. fi
  6522. if ! grep -q "DNSListenAddress 127.0.0.1" /etc/tor/torrc; then
  6523. echo 'DNSListenAddress 127.0.0.1' >> /etc/tor/torrc
  6524. fi
  6525. if ! grep -q "DNSListenAddress $LOCAL_NETWORK_STATIC_IP_ADDRESS" /etc/tor/torrc; then
  6526. echo "DNSListenAddress $LOCAL_NETWORK_STATIC_IP_ADDRESS" >> /etc/tor/torrc
  6527. fi
  6528. echo 'route_outgoing_traffic_through_tor' >> $COMPLETION_FILE
  6529. }
  6530. # A command to create a git repository for a project
  6531. function create_git_project {
  6532. if grep -Fxq "create_git_project" $COMPLETION_FILE; then
  6533. return
  6534. fi
  6535. apt-get -y install git
  6536. echo '#!/bin/bash' > /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6537. echo '' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6538. echo 'GIT_PROJECT_NAME=$1' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6539. echo 'if [ ! $GIT_PROJECT_NAME ]; then' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6540. echo ' echo "Please specify a project name, without any spaces"' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6541. echo ' exit 1' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6542. echo 'fi' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6543. echo '' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6544. echo 'if [ ! -d /home/$USER/projects/$GIT_PROJECT_NAME ]; then' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6545. echo ' mkdir -p /home/$USER/projects/$GIT_PROJECT_NAME' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6546. echo 'fi' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6547. echo '' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6548. echo 'cd /home/$USER/projects/$GIT_PROJECT_NAME' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6549. echo 'git init --bare' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6550. echo '' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6551. echo -n 'echo "Your project has been created, ' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6552. echo 'use the following command to clone the repository"' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6553. echo -n " git clone ssh://$MY_USERNAME@$DOMAIN_NAME:$SSH_PORT" >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6554. echo '/home/$USER/projects/$GIT_PROJECT_NAME' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6555. echo '' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6556. echo 'exit 0' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6557. chmod +x /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  6558. echo 'create_git_project' >> $COMPLETION_FILE
  6559. }
  6560. # Create daily backups of any projects on Github
  6561. # Then if Github goes away, turns evil, is censored or has
  6562. # outages then you still have access to your projects
  6563. function backup_github_projects {
  6564. if grep -Fxq "backup_github_projects" $COMPLETION_FILE; then
  6565. return
  6566. fi
  6567. if [ ! $GITHUB_USERNAME ]; then
  6568. return 731
  6569. fi
  6570. if [ ! $GITHUB_BACKUP_DIRECTORY ]; then
  6571. return 732
  6572. fi
  6573. apt-get -y install git
  6574. # create a github backups directory if needed
  6575. if [ ! -d $GITHUB_BACKUP_DIRECTORY ]; then
  6576. mkdir -p $GITHUB_BACKUP_DIRECTORY
  6577. fi
  6578. # get the backup utility
  6579. cd $INSTALL_DIR
  6580. git clone https://github.com/josegonzalez/python-github-backup
  6581. # install it
  6582. cd $INSTALL_DIR/python-github-backup
  6583. python setup.py install
  6584. # add a daily cron entry
  6585. echo '#!/bin/bash' > /etc/cron.daily/github
  6586. echo "github-backup $GITHUB_USERNAME -o $GITHUB_BACKUP_DIRECTORY --repositories" >> /etc/cron.daily/github
  6587. echo 'exit 0' >> /etc/cron.daily/github
  6588. chmod +x /etc/cron.daily/github
  6589. # do an initial backup
  6590. /etc/cron.daily/github
  6591. echo 'backup_github_projects' >> $COMPLETION_FILE
  6592. }
  6593. function get_wifi_essid {
  6594. if [ -f /home/$MY_USERNAME/README ]; then
  6595. if grep -q "ESSID" /home/$MY_USERNAME/README; then
  6596. if [ ! $WIFI_ESSID ]; then
  6597. WIFI_ESSID=$(cat /home/$MY_USERNAME/README | grep "ESSID" | awk -F ':' '{print $2}' | sed 's/^ *//')
  6598. fi
  6599. fi
  6600. fi
  6601. }
  6602. function get_wifi_password {
  6603. if [ -f /home/$MY_USERNAME/README ]; then
  6604. if grep -q "Wifi password" /home/$MY_USERNAME/README; then
  6605. if [ ! $WIFI_PASSWORD ]; then
  6606. WIFI_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "Wifi password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  6607. fi
  6608. fi
  6609. fi
  6610. }
  6611. function enable_wifi_hotspot {
  6612. if grep -Fxq "enable_wifi_hotspot" $COMPLETION_FILE; then
  6613. return
  6614. fi
  6615. if [[ $ENABLE_WIFI_HOTSPOT != "yes" ]]; then
  6616. return
  6617. fi
  6618. if ! grep -Fxq "random_number_generator" $COMPLETION_FILE; then
  6619. echo 'enable_wifi_hotspot was called before the random number generator was initialised'
  6620. exit 853
  6621. fi
  6622. get_wifi_essid
  6623. get_wifi_password
  6624. # Create an ESSID if one doesn't exist
  6625. if [ ! $WIFI_ESSID ]; then
  6626. TEMP_WIFI_ESSID=$(openssl rand -base64 8)
  6627. WIFI_ESSID="Freedom"${TEMP_WIFI_ESSID:0:3}
  6628. fi
  6629. # Add a password
  6630. if [[ $WIFI_FORCE_PASSWORD == "yes" ]]; then
  6631. if [ ! $WIFI_PASSWORD ]; then
  6632. TEMP_WIFI_PASSWORD=$(openssl rand -base64 8)
  6633. WIFI_PASSWORD=${TEMP_WIFI_PASSWORD:0:8}
  6634. fi
  6635. fi
  6636. if ! grep -q "Wifi hotspot" /etc/network/interfaces; then
  6637. echo '' >> /etc/network/interfaces
  6638. echo '# Wifi hotspot' >> /etc/network/interfaces
  6639. echo "auto $WIFI_INTERFACE" >> /etc/network/interfaces
  6640. echo "iface $WIFI_INTERFACE inet static" >> /etc/network/interfaces
  6641. echo " address $WIFI_STATIC_IP_ADDRESS" >> /etc/network/interfaces
  6642. echo ' netmask 255.255.255.0' >> /etc/network/interfaces
  6643. service networking restart
  6644. fi
  6645. apt-get -y install hostapd isc-dhcp-server
  6646. if [ ! -f /etc/default/hostapd ]; then
  6647. echo 'Unable to find /etc/default/hostapd. hostapd may not have installed correctly'
  6648. exit 490
  6649. fi
  6650. sed -i 's|#DAEMON_CONF=.*|DAEMON_CONF="/etc/hostapd/hostapd.conf"|g' /etc/default/hostapd
  6651. echo "interface=$WIFI_INTERFACE" > /etc/hostapd/hostapd.conf
  6652. echo "ssid=$WIFI_ESSID" >> /etc/hostapd/hostapd.conf
  6653. echo "hw_mode=$WIFI_HOTSPOT_MODE" >> /etc/hostapd/hostapd.conf
  6654. echo "channel=${WIFI_HOTSPOT_CHANNEL}" >> /etc/hostapd/hostapd.conf
  6655. echo 'macaddr_acl=0' >> /etc/hostapd/hostapd.conf
  6656. echo 'auth_algs=1' >> /etc/hostapd/hostapd.conf
  6657. echo 'ignore_broadcast_ssid=0' >> /etc/hostapd/hostapd.conf
  6658. echo 'wpa=2' >> /etc/hostapd/hostapd.conf
  6659. echo "wpa_passphrase=$WIFI_PASSWORD" >> /etc/hostapd/hostapd.conf
  6660. echo 'wpa_key_mgmt=WPA-PSK' >> /etc/hostapd/hostapd.conf
  6661. echo 'wpa_pairwise=TKIP' >> /etc/hostapd/hostapd.conf
  6662. echo 'rsn_pairwise=CCMP' >> /etc/hostapd/hostapd.conf
  6663. service hostapd restart
  6664. systemctl daemon-reload
  6665. sed -i 's/#net.ipv4.ip_forward/net.ipv4.ip_forward/g' /etc/sysctl.conf
  6666. sed -i 's/net.ipv4.ip_forward=.*/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
  6667. echo 1 > /proc/sys/net/ipv4/ip_forward
  6668. sed -i "s/net.ipv4.conf.all.accept_redirects = 0/net.ipv4.conf.all.accept_redirects = 1/g" /etc/sysctl.conf
  6669. sed -i "s/net.ipv4.conf.all.send_redirects = 0/net.ipv4.conf.all.send_redirects = 1/g" /etc/sysctl.conf
  6670. sed -i "s/net.ipv4.conf.all.accept_source_route = 0/net.ipv4.conf.all.accept_source_route = 1/g" /etc/sysctl.conf
  6671. sed -i "s/net.ipv4.conf.default.rp_filter=1/#net.ipv4.conf.default.rp_filter=1/g" /etc/sysctl.conf
  6672. sed -i "s/net.ipv4.conf.all.rp_filter=1/#net.ipv4.conf.all.rp_filter=1/g" /etc/sysctl.conf
  6673. sed -i "s/net.ipv4.ip_forward=0/#net.ipv4.ip_forward=1/g" /etc/sysctl.conf
  6674. sed -i 's/net.ipv4.icmp_echo_ignore_all = 1/net.ipv4.icmp_echo_ignore_all = 0/g' /etc/sysctl.conf
  6675. iptables --flush
  6676. iptables --table nat --flush
  6677. iptables --delete-chain
  6678. iptables --table nat --delete-chain
  6679. iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  6680. iptables -A FORWARD -i eth0 -o $WIFI_INTERFACE -m state --state RELATED,ESTABLISHED -j ACCEPT
  6681. iptables -A FORWARD -i $WIFI_INTERFACE -o eth0 -j ACCEPT
  6682. save_firewall_settings
  6683. sed -i 's/option domain-name "example.org";/#option domain-name "example.org";/g' /etc/dhcp/dhcpd.conf
  6684. sed -i 's/option domain-name-servers ns1.example.org, ns2.example.org;/#option domain-name-servers ns1.example.org, ns2.example.org;/g' /etc/dhcp/dhcpd.conf
  6685. sed -i 's/#authoritative;/authoritative;/g' /etc/dhcp/dhcpd.conf
  6686. if ! grep -q "subnet $WIFI_SUBNET netmask 255.255.255.0" /etc/dhcp/dhcpd.conf; then
  6687. echo "subnet $WIFI_SUBNET netmask 255.255.255.0 {" >> /etc/dhcp/dhcpd.conf
  6688. echo " range $WIFI_IP_RANGE_START $WIFI_IP_RANGE_END;" >> /etc/dhcp/dhcpd.conf
  6689. echo " option broadcast-address $WIFI_BROADCAST_ADDRESS;" >> /etc/dhcp/dhcpd.conf
  6690. echo " option routers $ROUTER_IP_ADDRESS;" >> /etc/dhcp/dhcpd.conf
  6691. echo ' default-lease-time 600;' >> /etc/dhcp/dhcpd.conf
  6692. echo ' max-lease-time 7200;' >> /etc/dhcp/dhcpd.conf
  6693. echo ' option domain-name "local";' >> /etc/dhcp/dhcpd.conf
  6694. echo " option domain-name-servers $WIFI_DNS_SERVERS;" >> /etc/dhcp/dhcpd.conf
  6695. echo '}' >> /etc/dhcp/dhcpd.conf
  6696. fi
  6697. sed -i "s/INTERFACES=.*/INTERFACES='$WIFI_INTERFACE'/g" /etc/default/isc-dhcp-server
  6698. service isc-dhcp-server restart
  6699. # Add details to the README file
  6700. if ! grep -q "Wifi Hotspot" /home/$MY_USERNAME/README; then
  6701. echo '' >> /home/$MY_USERNAME/README
  6702. echo '' >> /home/$MY_USERNAME/README
  6703. echo 'Wifi Hotspot' >> /home/$MY_USERNAME/README
  6704. echo '============' >> /home/$MY_USERNAME/README
  6705. echo "ESSID: $WIFI_ESSID" >> /home/$MY_USERNAME/README
  6706. if [ $WIFI_PASSWORD ]; then
  6707. echo "Wifi password: $WIFI_PASSWORD" >> /home/$MY_USERNAME/README
  6708. else
  6709. echo 'No password' >> /home/$MY_USERNAME/README
  6710. fi
  6711. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  6712. fi
  6713. echo 'enable_wifi_hotspot' >> $COMPLETION_FILE
  6714. }
  6715. function enable_wifi {
  6716. if grep -Fxq "enable_wifi" $COMPLETION_FILE; then
  6717. return
  6718. fi
  6719. if [[ $ENABLE_WIFI != "yes" ]]; then
  6720. return
  6721. fi
  6722. if ! grep -Fxq "random_number_generator" $COMPLETION_FILE; then
  6723. echo 'enable_wifi was called before the random number generator was initialised'
  6724. exit 853
  6725. fi
  6726. sed -i 's/#auto wlan0/auto wlan0/g' /etc/network/interfaces
  6727. sed -i 's/#iface wlan0 inet dhcp/iface wlan0 inet dhcp/g' /etc/network/interfaces
  6728. sed -i 's/# wpa-ssid "essid"/ wpa-ssid "essid"/g' /etc/network/interfaces
  6729. get_wifi_essid
  6730. get_wifi_password
  6731. # Create an ESSID if one doesn't exist
  6732. if [ ! $WIFI_ESSID ]; then
  6733. TEMP_WIFI_ESSID=$(openssl rand -base64 8)
  6734. WIFI_ESSID="Freedom"${TEMP_WIFI_ESSID:0:3}
  6735. fi
  6736. sed -i "s/essid/$WIFI_ESSID/g" /etc/network/interfaces
  6737. # Add a password
  6738. if [[ $WIFI_FORCE_PASSWORD == "yes" ]]; then
  6739. if [ ! $WIFI_PASSWORD ]; then
  6740. TEMP_WIFI_PASSWORD=$(openssl rand -base64 8)
  6741. WIFI_PASSWORD=${TEMP_WIFI_PASSWORD:0:8}
  6742. fi
  6743. fi
  6744. # Add a password
  6745. if [ $WIFI_PASSWORD ]; then
  6746. sed -i 's/# wpa-psk "password"/ wpa-psk "wifipassword"/g' /etc/network/interfaces
  6747. sed -i "s/wifipassword/$WIFI_PASSWORD/g" /etc/network/interfaces
  6748. fi
  6749. service networking restart
  6750. if [ ! "$?" = "0" ]; then
  6751. echo 'Unable to restart networking'
  6752. exit 855
  6753. fi
  6754. # Add details to the README file
  6755. if [[ ENABLE_WIFI != "yes" ]]; then
  6756. if ! grep -q "Wifi Settings" /home/$MY_USERNAME/README; then
  6757. echo '' >> /home/$MY_USERNAME/README
  6758. echo '' >> /home/$MY_USERNAME/README
  6759. echo 'Wifi Settings' >> /home/$MY_USERNAME/README
  6760. echo '=============' >> /home/$MY_USERNAME/README
  6761. echo "ESSID: $WIFI_ESSID" >> /home/$MY_USERNAME/README
  6762. if [ $WIFI_PASSWORD ]; then
  6763. echo "Wifi password: $WIFI_PASSWORD" >> /home/$MY_USERNAME/README
  6764. else
  6765. echo 'No password' >> /home/$MY_USERNAME/README
  6766. fi
  6767. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  6768. fi
  6769. fi
  6770. echo 'enable_wifi' >> $COMPLETION_FILE
  6771. }
  6772. function install_final {
  6773. if grep -Fxq "install_final" $COMPLETION_FILE; then
  6774. return
  6775. fi
  6776. # unmount any attached usb drive
  6777. if [ -d $USB_MOUNT ]; then
  6778. umount $USB_MOUNT
  6779. rm -rf $USB_MOUNT
  6780. fi
  6781. echo 'install_final' >> $COMPLETION_FILE
  6782. echo ''
  6783. echo ' *** Freedombone installation is complete. Rebooting... ***'
  6784. echo ''
  6785. if [ -f "/home/$MY_USERNAME/README" ]; then
  6786. echo "See /home/$MY_USERNAME/README for post-installation instructions."
  6787. echo ''
  6788. fi
  6789. reboot
  6790. }
  6791. read_configuration
  6792. argument_checks
  6793. install_not_on_BBB
  6794. remove_default_user
  6795. configure_firewall
  6796. configure_firewall_for_ssh
  6797. configure_firewall_for_dns
  6798. configure_firewall_for_ftp
  6799. configure_firewall_for_web_access
  6800. remove_proprietary_repos
  6801. change_debian_repos
  6802. enable_backports
  6803. configure_dns
  6804. initial_setup
  6805. enforce_good_passwords
  6806. install_editor
  6807. change_login_message
  6808. update_the_kernel
  6809. enable_zram
  6810. random_number_generator
  6811. set_your_domain_name
  6812. time_synchronisation
  6813. configure_internet_protocol
  6814. create_git_project
  6815. backup_github_projects
  6816. configure_ssh
  6817. check_hwrng
  6818. search_for_attached_usb_drive
  6819. regenerate_ssh_keys
  6820. script_to_make_self_signed_certificates
  6821. create_upgrade_script
  6822. enable_wifi_hotspot
  6823. enable_wifi
  6824. route_outgoing_traffic_through_tor
  6825. install_watchdog_script
  6826. configure_email
  6827. create_procmail
  6828. #spam_filtering
  6829. configure_imap
  6830. configure_gpg
  6831. encrypt_incoming_email
  6832. encrypt_outgoing_email
  6833. email_client
  6834. email_from_address
  6835. configure_firewall_for_email
  6836. folders_for_mailing_lists
  6837. folders_for_email_addresses
  6838. dynamic_dns_freedns
  6839. create_public_mailing_list
  6840. #create_private_mailing_list
  6841. encrypt_all_email
  6842. import_email
  6843. script_for_attaching_usb_drive
  6844. install_web_server
  6845. configure_firewall_for_web_server
  6846. install_owncloud
  6847. install_owncloud_music_app
  6848. install_xmpp
  6849. configure_firewall_for_xmpp
  6850. install_irc_server
  6851. configure_firewall_for_irc
  6852. install_wiki
  6853. install_blog
  6854. install_gnu_social
  6855. install_redmatrix
  6856. install_dlna_server
  6857. configure_firewall_for_dlna
  6858. install_mediagoblin
  6859. repair_databases_script
  6860. create_backup_script
  6861. create_restore_script
  6862. backup_to_friends_servers
  6863. restore_from_friend
  6864. create_tor_dongle
  6865. intrusion_detection
  6866. install_final
  6867. echo 'Freedombone installation is complete'
  6868. exit 0