Compare commits

...

No commits in common. 'master' and 'gh-pages' have entirely different histories.

  1. 1
      .gitignore
  2. 3
      .gitmodules
  3. 20
      LICENSE
  4. 16
      README.md
  5. BIN
      assets/images/favicon.png
  6. 20
      assets/images/icons/bitbucket.4ebea66e.svg
  7. 18
      assets/images/icons/github.a4034fb1.svg
  8. 38
      assets/images/icons/gitlab.348cdb3a.svg
  9. 1
      assets/javascripts/application.0cf9b500.js
  10. 1
      assets/javascripts/lunr/lunr.da.js
  11. 1
      assets/javascripts/lunr/lunr.de.js
  12. 1
      assets/javascripts/lunr/lunr.du.js
  13. 1
      assets/javascripts/lunr/lunr.es.js
  14. 1
      assets/javascripts/lunr/lunr.fi.js
  15. 1
      assets/javascripts/lunr/lunr.fr.js
  16. 1
      assets/javascripts/lunr/lunr.hu.js
  17. 1
      assets/javascripts/lunr/lunr.it.js
  18. 1
      assets/javascripts/lunr/lunr.jp.js
  19. 1
      assets/javascripts/lunr/lunr.multi.js
  20. 1
      assets/javascripts/lunr/lunr.no.js
  21. 1
      assets/javascripts/lunr/lunr.pt.js
  22. 1
      assets/javascripts/lunr/lunr.ro.js
  23. 1
      assets/javascripts/lunr/lunr.ru.js
  24. 1
      assets/javascripts/lunr/lunr.stemmer.support.js
  25. 1
      assets/javascripts/lunr/lunr.sv.js
  26. 1
      assets/javascripts/lunr/lunr.tr.js
  27. 1
      assets/javascripts/lunr/tinyseg.js
  28. 1
      assets/javascripts/modernizr.1aa3b519.js
  29. 2
      assets/stylesheets/application-palette.6079476c.css
  30. 2
      assets/stylesheets/application.8d40d89b.css
  31. 1090
      boot2root/index.html
  32. 0
      css/custom.css
  33. 477
      docs/boot2root.md
  34. 155
      docs/faq.md
  35. 141
      docs/geoserver-https.md
  36. 26
      docs/index.md
  37. 255
      docs/locked-out.md
  38. 150
      docs/smallmelo-migration-1.md
  39. 42
      docs/smallmelo-migration-2.md
  40. 86
      docs/smallmelo-migration-3.md
  41. 272
      docs/wisko-gitea.md
  42. 770
      faq/index.html
  43. 656
      geoserver-https/index.html
  44. 401
      index.html
  45. 705
      locked-out/index.html
  46. 1
      mkdocs-material
  47. 26
      mkdocs.yml
  48. 7
      search/lunr.min.js
  49. 1
      search/mustache.min.js
  50. 36
      search/require.js
  51. 4
      search/search-results-template.mustache
  52. 92
      search/search.js
  53. 514
      search/search_index.json
  54. 390
      search/text.js
  55. 76
      sitemap.xml
  56. 579
      smallmelo-migration-1/index.html
  57. 597
      smallmelo-migration-2/index.html
  58. 654
      smallmelo-migration-3/index.html
  59. 868
      wisko-gitea/index.html

1
.gitignore vendored

@ -1 +0,0 @@
site/

3
.gitmodules vendored

@ -1,3 +0,0 @@
[submodule "mkdocs-material"]
path = mkdocs-material
url = https://git.charlesreid1.com/charlesreid1/mkdocs-material

20
LICENSE

@ -1,20 +0,0 @@
Copyright (c) 2018 Charles Reid
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

16
README.md

@ -1,16 +0,0 @@
# The Wisko Manual
To make everything:
```
mkdocs build
```
This builds everything in the `site` directory.
To view the docs:
```
mkdocs serve
```
and visit lcoalhost:8000 in your browser.

BIN
assets/images/favicon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 B

20
assets/images/icons/bitbucket.4ebea66e.svg

@ -0,0 +1,20 @@
<svg xmlns="http://www.w3.org/2000/svg" width="352" height="448"
viewBox="0 0 352 448" id="bitbucket">
<path fill="currentColor" d="M203.75 214.75q2 15.75-12.625 25.25t-27.875
1.5q-9.75-4.25-13.375-14.5t-0.125-20.5 13-14.5q9-4.5 18.125-3t16 8.875
6.875 16.875zM231.5 209.5q-3.5-26.75-28.25-41t-49.25-3.25q-15.75
7-25.125 22.125t-8.625 32.375q1 22.75 19.375 38.75t41.375 14q22.75-2
38-21t12.5-42zM291.25
74q-5-6.75-14-11.125t-14.5-5.5-17.75-3.125q-72.75-11.75-141.5 0.5-10.75
1.75-16.5 3t-13.75 5.5-12.5 10.75q7.5 7 19 11.375t18.375 5.5 21.875
2.875q57 7.25 112 0.25 15.75-2 22.375-3t18.125-5.375 18.75-11.625zM305.5
332.75q-2 6.5-3.875 19.125t-3.5 21-7.125 17.5-14.5 14.125q-21.5
12-47.375 17.875t-50.5 5.5-50.375-4.625q-11.5-2-20.375-4.5t-19.125-6.75-18.25-10.875-13-15.375q-6.25-24-14.25-73l1.5-4
4.5-2.25q55.75 37 126.625 37t126.875-37q5.25 1.5 6 5.75t-1.25 11.25-2
9.25zM350.75 92.5q-6.5 41.75-27.75 163.75-1.25 7.5-6.75 14t-10.875
10-13.625 7.75q-63 31.5-152.5
22-62-6.75-98.5-34.75-3.75-3-6.375-6.625t-4.25-8.75-2.25-8.5-1.5-9.875-1.375-8.75q-2.25-12.5-6.625-37.5t-7-40.375-5.875-36.875-5.5-39.5q0.75-6.5
4.375-12.125t7.875-9.375 11.25-7.5 11.5-5.625 12-4.625q31.25-11.5
78.25-16 94.75-9.25 169 12.5 38.75 11.5 53.75 30.5 4 5 4.125
12.75t-1.375 13.5z" />
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

18
assets/images/icons/github.a4034fb1.svg

@ -0,0 +1,18 @@
<svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
viewBox="0 0 416 448" id="github">
<path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
99.5z" />
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

38
assets/images/icons/gitlab.348cdb3a.svg

@ -0,0 +1,38 @@
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500"
viewBox="0 0 500 500" id="gitlab">
<g transform="translate(156.197863, 1.160267)">
<path fill="currentColor"
d="M93.667,473.347L93.667,473.347l90.684-279.097H2.983L93.667,
473.347L93.667,473.347z" />
</g>
<g transform="translate(28.531199, 1.160800)" opacity="0.7">
<path fill="currentColor"
d="M221.333,473.345L130.649,194.25H3.557L221.333,473.345L221.333,
473.345z" />
</g>
<g transform="translate(0.088533, 0.255867)" opacity="0.5">
<path fill="currentColor"
d="M32,195.155L32,195.155L4.441,279.97c-2.513,7.735,0.24,16.21,6.821,
20.99l238.514,173.29 L32,195.155L32,195.155z" />
</g>
<g transform="translate(29.421866, 280.255593)">
<path fill="currentColor"
d="M2.667-84.844h127.092L75.14-252.942c-2.811-8.649-15.047-8.649-17.856,
0L2.667-84.844 L2.667-84.844z" />
</g>
<g transform="translate(247.197860, 1.160800)" opacity="0.7">
<path fill="currentColor"
d="M2.667,473.345L93.351,194.25h127.092L2.667,473.345L2.667,
473.345z" />
</g>
<g transform="translate(246.307061, 0.255867)" opacity="0.5">
<path fill="currentColor"
d="M221.334,195.155L221.334,195.155l27.559,84.815c2.514,7.735-0.24,
16.21-6.821,20.99 L3.557,474.25L221.334,195.155L221.334,195.155z" />
</g>
<g transform="translate(336.973725, 280.255593)">
<path fill="currentColor"
d="M130.667-84.844H3.575l54.618-168.098c2.811-8.649,15.047-8.649,
17.856,0L130.667-84.844 L130.667-84.844z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

1
assets/javascripts/application.0cf9b500.js

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/lunr.da.js

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,i,n;e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=(r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){var e,n,t,s=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],o=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],u=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],c=new i;function l(){var e,r=c.limit-c.cursor;c.cursor>=n&&(e=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,c.find_among_b(o,4)?(c.bra=c.cursor,c.limit_backward=e,c.cursor=c.limit-r,c.cursor>c.limit_backward&&(c.cursor--,c.bra=c.cursor,c.slice_del())):c.limit_backward=e)}this.setCurrent=function(e){c.setCurrent(e)},this.getCurrent=function(){return c.getCurrent()},this.stem=function(){var r,i=c.cursor;return function(){var r,i=c.cursor+3;if(n=c.limit,0<=i&&i<=c.limit){for(e=i;;){if(r=c.cursor,c.in_grouping(d,97,248)){c.cursor=r;break}if(c.cursor=r,r>=c.limit)return;c.cursor++}for(;!c.out_grouping(d,97,248);){if(c.cursor>=c.limit)return;c.cursor++}(n=c.cursor)<e&&(n=e)}}(),c.limit_backward=i,c.cursor=c.limit,function(){var e,r;if(c.cursor>=n&&(r=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,e=c.find_among_b(s,32),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del();break;case 2:c.in_grouping_b(u,97,229)&&c.slice_del()}}(),c.cursor=c.limit,l(),c.cursor=c.limit,function(){var e,r,i,t=c.limit-c.cursor;if(c.ket=c.cursor,c.eq_s_b(2,"st")&&(c.bra=c.cursor,c.eq_s_b(2,"ig")&&c.slice_del()),c.cursor=c.limit-t,c.cursor>=n&&(r=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,e=c.find_among_b(a,5),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del(),i=c.limit-c.cursor,l(),c.cursor=c.limit-i;break;case 2:c.slice_from("løs")}}(),c.cursor=c.limit,c.cursor>=n&&(r=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,c.out_grouping_b(d,97,248)?(c.bra=c.cursor,t=c.slice_to(t),c.limit_backward=r,c.eq_v_b(t)&&c.slice_del()):c.limit_backward=r),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}});

1
assets/javascripts/lunr/lunr.de.js

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/lunr.du.js

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/lunr.es.js

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/lunr.fi.js

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/lunr.fr.js

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/lunr.hu.js

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/lunr.it.js

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/lunr.jp.js

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.jp=function(){this.pipeline.reset(),this.pipeline.add(e.jp.stopWordFilter,e.jp.stemmer),r?this.tokenizer=e.jp.tokenizer:(e.tokenizer&&(e.tokenizer=e.jp.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.jp.tokenizer))};var t=new e.TinySegmenter;e.jp.tokenizer=function(n){if(!arguments.length||null==n||null==n)return[];if(Array.isArray(n))return n.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(var i=n.toString().toLowerCase().replace(/^\s+/,""),o=i.length-1;o>=0;o--)if(/\S/.test(i.charAt(o))){i=i.substring(0,o+1);break}return t.segment(i).filter(function(e){return!!e}).map(function(t){return r?new e.Token(t):t})},e.jp.stemmer=function(e){return e},e.Pipeline.registerFunction(e.jp.stemmer,"stemmer-jp"),e.jp.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Za-zA-Z0-90-9",e.jp.stopWordFilter=function(t){if(-1===e.jp.stopWordFilter.stopWords.indexOf(r?t.toString():t))return t},e.jp.stopWordFilter=e.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),e.Pipeline.registerFunction(e.jp.stopWordFilter,"stopWordFilter-jp")}});

1
assets/javascripts/lunr/lunr.multi.js

@ -0,0 +1 @@
!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var i=Array.prototype.slice.call(arguments),t=i.join("-"),r="",n=[],s=[],p=0;p<i.length;++p)"en"==i[p]?(r+="\\w",n.unshift(e.stopWordFilter),n.push(e.stemmer),s.push(e.stemmer)):(r+=e[i[p]].wordCharacters,n.unshift(e[i[p]].stopWordFilter),n.push(e[i[p]].stemmer),s.push(e[i[p]].stemmer));var o=e.trimmerSupport.generateTrimmer(r);return e.Pipeline.registerFunction(o,"lunr-multi-trimmer-"+t),n.unshift(o),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,n),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,s))}}}});

1
assets/javascripts/lunr/lunr.no.js

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,n,i;e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=(r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){var e,i,t=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],o=[new r("dt",-1,-1),new r("vt",-1,-1)],s=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],a=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],m=[119,125,149,1],l=new n;this.setCurrent=function(e){l.setCurrent(e)},this.getCurrent=function(){return l.getCurrent()},this.stem=function(){var r,n,u,d,c=l.cursor;return function(){var r,n=l.cursor+3;if(i=l.limit,0<=n||n<=l.limit){for(e=n;;){if(r=l.cursor,l.in_grouping(a,97,248)){l.cursor=r;break}if(r>=l.limit)return;l.cursor=r+1}for(;!l.out_grouping(a,97,248);){if(l.cursor>=l.limit)return;l.cursor++}(i=l.cursor)<e&&(i=e)}}(),l.limit_backward=c,l.cursor=l.limit,function(){var e,r,n;if(l.cursor>=i&&(r=l.limit_backward,l.limit_backward=i,l.ket=l.cursor,e=l.find_among_b(t,29),l.limit_backward=r,e))switch(l.bra=l.cursor,e){case 1:l.slice_del();break;case 2:n=l.limit-l.cursor,l.in_grouping_b(m,98,122)?l.slice_del():(l.cursor=l.limit-n,l.eq_s_b(1,"k")&&l.out_grouping_b(a,97,248)&&l.slice_del());break;case 3:l.slice_from("er")}}(),l.cursor=l.limit,n=l.limit-l.cursor,l.cursor>=i&&(r=l.limit_backward,l.limit_backward=i,l.ket=l.cursor,l.find_among_b(o,2)?(l.bra=l.cursor,l.limit_backward=r,l.cursor=l.limit-n,l.cursor>l.limit_backward&&(l.cursor--,l.bra=l.cursor,l.slice_del())):l.limit_backward=r),l.cursor=l.limit,l.cursor>=i&&(d=l.limit_backward,l.limit_backward=i,l.ket=l.cursor,(u=l.find_among_b(s,11))?(l.bra=l.cursor,l.limit_backward=d,1==u&&l.slice_del()):l.limit_backward=d),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});

1
assets/javascripts/lunr/lunr.pt.js

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/lunr.ro.js

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/lunr.ru.js

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/lunr.stemmer.support.js

@ -0,0 +1 @@
!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var r;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(t){r=t,this.cursor=0,this.limit=t.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var t=r;return r=null,t},in_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e<=s&&e>=i&&t[(e-=i)>>3]&1<<(7&e))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&t[(e-=i)>>3]&1<<(7&e))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e>s||e<i)return this.cursor++,!0;if(!(t[(e-=i)>>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e<i)return this.cursor--,!0;if(!(t[(e-=i)>>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor+s)!=i.charCodeAt(s))return!1;return this.cursor+=t,!0},eq_s_b:function(t,i){if(this.cursor-this.limit_backward<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor-t+s)!=i.charCodeAt(s))return!1;return this.cursor-=t,!0},find_among:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=l;m<_.s_size;m++){if(n+l==u){f=-1;break}if(f=r.charCodeAt(n+l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){if(o>=(_=t[s]).s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=(m=t[a]).s_size-1-l;_>=0;_--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-m.s[_])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var m;if(o>=(m=t[s]).s_size){if(this.cursor=n-m.s_size,!m.method)return m.result;var b=m.method();if(this.cursor=n-m.s_size,b)return m.result}if((s=m.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}});

1
assets/javascripts/lunr/lunr.sv.js

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,n,t;e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=(r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){var e,t,i=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],s=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],o=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],u=[119,127,149],m=new n;this.setCurrent=function(e){m.setCurrent(e)},this.getCurrent=function(){return m.getCurrent()},this.stem=function(){var r,n=m.cursor;return function(){var r,n=m.cursor+3;if(t=m.limit,0<=n||n<=m.limit){for(e=n;;){if(r=m.cursor,m.in_grouping(o,97,246)){m.cursor=r;break}if(m.cursor=r,m.cursor>=m.limit)return;m.cursor++}for(;!m.out_grouping(o,97,246);){if(m.cursor>=m.limit)return;m.cursor++}(t=m.cursor)<e&&(t=e)}}(),m.limit_backward=n,m.cursor=m.limit,function(){var e,r=m.limit_backward;if(m.cursor>=t&&(m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(i,37),m.limit_backward=r,e))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.in_grouping_b(u,98,121)&&m.slice_del()}}(),m.cursor=m.limit,r=m.limit_backward,m.cursor>=t&&(m.limit_backward=t,m.cursor=m.limit,m.find_among_b(s,7)&&(m.cursor=m.limit,m.ket=m.cursor,m.cursor>m.limit_backward&&(m.bra=--m.cursor,m.slice_del())),m.limit_backward=r),m.cursor=m.limit,function(){var e,r;if(m.cursor>=t){if(r=m.limit_backward,m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(a,5))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.slice_from("lös");break;case 3:m.slice_from("full")}m.limit_backward=r}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}});

1
assets/javascripts/lunr/lunr.tr.js

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/tinyseg.js

File diff suppressed because one or more lines are too long

1
assets/javascripts/modernizr.1aa3b519.js

File diff suppressed because one or more lines are too long

2
assets/stylesheets/application-palette.6079476c.css

File diff suppressed because one or more lines are too long

2
assets/stylesheets/application.8d40d89b.css

File diff suppressed because one or more lines are too long

1090
boot2root/index.html

File diff suppressed because it is too large Load Diff

0
docs/css/custom.css → css/custom.css

477
docs/boot2root.md

@ -1,477 +0,0 @@
# wisko
## Getting to a Shell
### Hardware
wisko is a higher-end 1-CPU Digital Ocean droplet.
* 1 CPU
* 50 GB SSD
* 2 GB RAM
IP address: 159.65.75.41
### Spin Up Hardware
* Follow the Digital Ocean steps to spin up a droplet in the SF region.
* Once the droplet is created, get the IP address.
* Pro tip: find your ssh key in `~/.ssh/id_rsa.pub` and paste it in during the Droplet creation process to avoid password issues.
### Set DNS Records
Add the following DNS records:
**A Record**:
* Record: none (set to @ automatically)
* Value: 138.68.10.168
**A Record**:
* Record: git
* Value: 138.68.10.168
**CNAME Record**:
* Record:
### Connect to Droplet
Check that the Droplet has been booted and is listening:
```plain
$ ping -c 4 138.68.10.168
PING 138.68.10.168 (138.68.10.168): 56 data bytes
64 bytes from 138.68.10.168: icmp_seq=0 ttl=56 time=28.494 ms
64 bytes from 138.68.10.168: icmp_seq=1 ttl=56 time=26.120 ms
64 bytes from 138.68.10.168: icmp_seq=2 ttl=56 time=25.972 ms
64 bytes from 138.68.10.168: icmp_seq=3 ttl=56 time=27.232 ms
--- 138.68.10.168 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 25.972/26.955/28.494/1.014 ms
```
Now connect to the droplet. By default, you log in as as the root user:
```
$ ssh root@138.68.10.168
[...bunch of login stuff...]
root@ubuntu-s-1vcpu-2gb-sfo2-01:~#
```
Now we're ready to get started.
## Prepare for LAMP
[See DO guide](https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-16-04)
### Make Normal User
Add a non-root user:
```
adduser melo
passwd melo
usermod -aG sudo melo
```
(While we're at it, create a git user as well for gitea):
```
adduser git
passwd git
```
Prepare to SSH as that user:
```
mkdir /home/melo/.ssh
chown melo:melo /home/melo/.ssh
chmod 700 /home/melo/.ssh
chmod 600 /home/melo/.ssh/authorized_key
```
SSH as this user in a separate window (keep one window open and logged in as root!), and test sudo abilities:
```
sudo whoami
```
Disable root login via ssh:
```
vim /etc/ssh/sshd_config
```
Change `PermitRootLogin` to `no`.
Restart SSH service:
```
sudo service ssh restart
```
Now log out and log back in as user melo.
### Dotfiles Bootstrap
[Dotfiles link](https://charlesreid1.com:3000/dotfiles/wisko/src/master/install_packages.sh)
Start out with the wisko dotfiles repository:
```
apt-get install git
cd ~
git clone https://charlesreid1.com:3000/dotfiles/wisko.git
cd wisko
```
Prepare for bootstrap:
```
./pre_bootstrap.sh
```
Now bootstrap:
```
./bootstrap.sh
```
Then set the machine name:
```
sudo ./set_machine_name.sh
```
Now log out and log back in.
### Aptitude
Install a bunch of the packages that are needed:
```
cd wisko
sudo ./install_packages.sh
```
Now we're ready to start on the LAMP server.
## Installing Apache
```
sudo apt-get install -y apache2
```
Edit Apache config file:
```
sudo vim /etc/apache2/sites-enabled/000-default.conf
```
Set the server name:
```
ServerName www.allthehatsformaps.com
...
DocumentRoot /var/www/htdocs/
```
Also make note of Apache username, should be `www-data`.
Check for syntax errors:
```
sudo apache2ctl configtest
```
Restart Apache:
```
sudo service apache2 restart
```
## Installing MySQL
```
sudo apt-get install -y mysql-server
```
This will ask you to set a root password.
Once the installation is complete, run:
```
mysql_secure_installation
```
to lock down MySQL. Do not configure `VALIDATE PASSWORD PLUGIN`.
## Installing PHP
```
sudo apt-get install -y php libapache2-mod-php php-mcrypt php-mysql php-cli
```
Make Apache look for `index.php` by editing:
```
/etc/apache2/mods-enabled/dir.conf
```
and changing:
```
DirectoryIndex index.html
```
to this:
```
DirectoryIndex index.php index.html
```
Restart apache:
```
sudo service apache2 restart
```
## Installing Wordpress
[boom](https://codex.wordpress.org/Installing_WordPress#Famous_5-Minute_Installation)
Download latest Wordpress:
```
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
```
This extracts to `wordpress/`. Now open MySQL and create a database for wordpress:
```
$ mysql -u root -p
mysql> CREATE DATABASE wordpress;
mysql> CREATE USER 'wpsql'@'localhost' IDENTIFIED BY "yourpasswordgoeshere";
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO "wpsql"@"localhost"
```
This creates a MySQL user `wpsql` and a MySQL database called `wordpress`.
Configure Wordpress by copying example config file to actual config file:
```
cp wp-config-sample.php wp-config.php
```
Edit `wp-config.php` and change the following:
* DB_NAME
* DB_USER
* DB_PASSWORD
* DB_HOST
* DB_CHARSET
* DB_COLLATE
Use [online secret generator](https://api.wordpress.org/secret-key/1.1/salt/) to set secret key values.
Now move the wordpress folder to your web root:
```
mv wordpress /var/www/htdocs/wordpress/
```
Change permissions so wordpress directory is owned by the Apache user:
```
chown -R www-data:www-data /var/www/htdocs/wordpress
```
Visit the Wordpress site and set it up:
```
<ip-addr-of-machine>/wordpress
```
Once you have set up the Wordpress site, you should protect the `wp-config.php` file:
```
sudo chown melo:melo wp-config.php
```
### FTP Server
To upgrade Wordpress you need an ftp server running. vsftpd is a lightweight ftp server. To install it:
```
sudo apt-get install vsftpd
```
By default, the `local_enable` option is set in `/etc/vsftpd.conf`, meaning you can log in to the ftp server using system credentials.
To check and make sure the process of uploading files via FTP works, try upgrading a plugin or installing/removing a plugin.
## Installing Gitea
### Goenv: To Manage Go Version
Start by installing goenv:
```
git clone https://github.com/syndbg/goenv.git ~/.goenv
```
Now add .goenv to your path in .bash_profile so goenv is a command
```
# add these line to ~/.bash_profile
export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
```
Now source it:
```
source ~/.bash_profile
```
List latest versions of go:
```
goenv install -l
```
Pick one to install:
```
goenv install 1.7.5
goenv global 1.7.5
```
Now set this as the go version:
```
eval "$(goenv init -)"
```
You will need to execute the above command **each time you wish to use the goenv version of Go.**
(Alternatively, you can add it to `.bashrc` to run it in each new shell.)
### Gitea: Git Web Server
[Installation of gitea from source](https://docs.gitea.io/en-us/install-from-source/)
```
go get -d -u code.gitea.io/gitea
cd $GOPATH/src/code.gitea.io/gitea
```
Now check out the version of gitea that you want to use:
```
git branch -a
git checkout origin/release/v1.2
```
Build with tag `bindata`:
```
TAGS="bindata" make generate build
```
The gitea binary is entirely self-contained. Before you run the binary, create a folder for gitea to use to store repositories (this should be somewhere you have read/write access, like `~/.gitea`):
```
mkdir ~/.gitea
```
We will point gitea to this directory in the next step. To run the binary from the current directory as the current user:
```
./gitea web
```
Now you can navigate to `<server-ip-address>:3000` to set up gitea.
### Set Up Gitea (via Browser)
Visit `<server-ip-address>:3000` in the browser to set up Gitea. You will need to set up a database, and we can use MySQL again. First, create a gitea user in MySQL:
```
$ mysql -u root -p
mysql> CREATE DATABASE gitea;
mysql> CREATE USER 'giteasql'@'localhost' IDENTIFIED BY "yourpasswordgoeshere";
mysql> GRANT ALL PRIVILEGES ON gitea.* TO "giteasql"@"localhost"
```
Now you should be able to punch in all your settings. Make sure you change the address of the app from `localhost:3000` to `<server-ip-address>:3000`.
### Updating Configuration/Templates
The path where gitea is installed is here:
```
/home/melo/gocode/src/code.gitea.io/gitea
```
available as a shortcut in the home directory:
```
$ ll ~/
...
lrwxrwxrwx 1 melo melo 30 Feb 24 22:17 gitea -> gocode/src/code.gitea.io/gitea/
```
Configuration file for gitea is located here:
```
~/gitea/custom/conf/app.ini
```
If you change the config file or any page templates, you will have to re-build the binary for the changes to take effect.
To rebuild the go binary, just set your go version with goenv and re-execute the make command from above:
```
eval "$(goenv init -)"
cd ~/gitea
TAGS="bindata" make generate build
```
### Errors
Note: if you see the following error, check which version of go you are using:
```
go build -i -v -tags 'bindata' -ldflags '-s -w -X "main.Version=1.2.3" -X "main.Tags=bindata"' -o gitea
vendor/code.gitea.io/git/command.go:9:2: cannot find package "context" in any of:
/home/melo/gocode/src/code.gitea.io/gitea/vendor/context (vendor tree)
/usr/lib/go-1.6/src/context (from $GOROOT)
/home/melo/gocode/src/context (from $GOPATH)
Makefile:205: recipe for target 'gitea' failed
make: *** [gitea] Error 1
```
When you run `which go` you should see
```
$ which go
/home/melo/.goenv/shims/go
```
If you see this, you will have problems:
```
$ which go
/usr/bin/go
```

155
docs/faq.md

@ -1,155 +0,0 @@
# wisko FAQ
## Apache
Link: [Apache on the Ubuntu Wiki](https://help.ubuntu.com/lts/serverguide/httpd.html)
Apache 2 was installed using the command `apt-get install apache2`.
### running apache2
To start, restart, or stop apache2 (it should start automatically on boot):
```
$ sudo service apache2 start
$ sudo service apache2 restart
$ sudo service apache2 stop
```
### apache2 configuration files
Apache keeps its configuration files in `/etc/apache2/`.
Apache is configured to host multiple websites, so there are multiple configuration files.
The global Apache config file is `/etc/apache2/apache2.conf`.
Site-specific Apache config files are in `/etc/apache2/sites-available`. To make a new site, just add a new file to that folder (name it whatever you'd like). There is an existing default configuration in that folder.
The site configuration file is where you edit the folder it serves up, the port it listens on, what requests it is listening for (subdomain or full domain), etc.
When you have edited a site's configuration file, enable it using the `a2ensite` command:
```
$ a2ensite name_of_site
```
Likewise, disable the site with `a2dissite`:
```
$ a2dissite name_of_site
```
## PHP
Link: [LAMP Server on Ubuntu Wiki](https://help.ubuntu.com/community/ApacheMySQLPHP)
PHP was installed using aptitude.
### running php
PHP is a programming language designed for web browsers, so you don't need to start it - Apache will handle that. (Apache has a PHP module that has been enabled.)
### php configuration files
PHP also has multiple configuration files, but we're only interested in the Apache-PHP configuration file at `/etc/php5/apache2/php.ini`. The main thing that you would change here is the max file upload size (10 MB by default) and whether PHP prints out errors ("debug" mode).
## MySQL
Link: [MySQL on Ubuntu Wiki](https://help.ubuntu.com/lts/serverguide/mysql.html)
MySQL server was installed using aptitude.
### networking
MySQL will listen on port 3306 for incoming requests on the local machine *only* (it is bound to the address 127.0.0.1:3306). That means no outside computers can communicate with MySQL. This can be changed in the configuration file.
### running mysql
To run the MySQL server in the background (it should start automatically on boot), run:
```
$ sudo service mysql start
```
To get a MySQL shell, run MySQL from the command line:
```
$ mysql -u root -p
```
This will prompt you for your MySQL password.
To make a new MySQL user, log in as the root user and run:
```
mysql> CREATE USER 'newuser'@'localhost' IDENTIFIED BY "newpassword";
```
To create a database and give the new user permission to edit that database:
```
mysql> CREATE DATABASE newdb;
mysql> GRANT ALL PRIVILEGES ON newdb.* TO "newuser"@"localhost";
```
MySQL is picky about quotations.
### mysql configuration files
The main MySQL configuration file is in `/etc/mysql/mysql.cnf`.
The MySQL configuration file that you should edit is at `/etc/mysql/mysql.conf.d/mysql.cnf`.
## Gitea
### gitea locations
Gitea was installed using `go get`, which integrates Go with Github. The command checked out a copy of the code in the directory specified by `$GOCODE`, which is at `~/gocode`.
The gitea source is located in `/home/melo/gocode/src/code.gitea.io/gitea/`, which is symlinked to `~melo/gitea/`.
### running gitea
Gitea will *not* run on boot - a startup service needs to be added in `/etc/init.d/gitea` that will run the gitea command as user `melo`.
The Gitea web server is a binary Go program that bundles together everything it needs to run. The binary is built and run in the directory `~melo/gocode/src/code.gitea.io/gitea` (both as the user `melo`).
To run the binary, you would execute it with the "web" argument:
```
$ cd ~/gocode/src/code.gitea.io/gitea/
$ ./gitea web
```
However, this starts the process in the foreground, so it's more convenient to run it in a screen (which allows you to detach from a shell, end your session, and reattach to that shell in a later session).
```
$ screen -d -m -S giteaweb $HOME/gocode/src/code.gitea.io/gitea/gitea web
```
This will start a new screen in detached mode (`-d -m`), call it `giteaweb` (`-S`), and run the command `gitea web`.
To reattach, list your screens using the `-ls` flag and reattach using the `-r` flag:
```
$ screen -ls
$ screen -r giteaweb
```
### rebuilding gitea
The gitea source directory at `~/gocode/src/code.gitea.io/gitea` is a cloned git repository, so you can check out different versions or branches as needed. If you make changes to the configuration file or template files, you will also need to re-make the gitea binary (since all of that is bundled up in the binary).
To remake the binary:
```
$ cd $GOCODE/src/code.gitea.io/gitea/
# here you can do stuff like
# git branch -a
# git checkout v1.3
$ TAGS="bindata" make generate build
```

141
docs/geoserver-https.md

@ -1,141 +0,0 @@
# Installing Geoserver & Connecting Over HTTPS
[Installing Geoserver instructions](http://docs.geoserver.org/stable/en/user/installation/linux.html)
## Install JRE 8
[install jre 8](https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04)
```
sudo apt-get update
sudo apt-get install default-jre
```
## Create geoserver folder
in `/usr/share`:
```
mkdir geoserver
```
## Downloaded geoserver on my computer, then ftp it to wisko
* Download geoserver files on my computer
* unzip
* copy files from the geoserver folder onto wisko:
from my computer:
```
scp -r /Users/melo/Desktop/geoserver-2.13.0 melo@159.65.75.41:/usr/share/geoserver
```
permission denied. fixed with:
```
sudo chown -R $USER:$USER /usr/share/geoserver
```
but then i decided to use FileZilla to transfer the files once I fixed my pemissions. Maybe another day, scp.
## add env variable
`echo "export GEOSERVER_HOME=/usr/share/geoserver" >\> ~/.profile`
## make myself the owner
`sudo chown -R USER_NAME /usr/share/geoserver/`
## start geoserver
```
cd /usr/share/geoserver/bin
sh startup.sh
```
--------
## setting up certs
To enable SSL connections to the geoserver, let Apache handle the SSL connections, and then pass the requests on to geoserver locally.
Apache already has certificates living at:
```
/etc/letsencrypt/live/smallmelo.com
```
and an HTTPS configuration file at:
```
/etc/apache2/sites-avaiable/smallmelo-le-ssl.conf
```
Modify the SSL configuration file to accept any URLs ending in `geoserver/` and forward them to the geoserver on port 8080.
There should be a `<VirtualHost>` block that controls the settings for HTTPS requests. Add a `<Location>` block to configure the behavior for geoserver URLs (note the order):
```
<VirtualHost *:443>
...
# This block is new:
<Location /geoserver>
ProxyPass http://localhost:8080/geoserver
ProxyPassReverse http://localhost:8080/geoserver
Order allow,deny
Allow from all
</Location>
...
# This must come after /geoserver block
<Directory /var/www/smallmelo/public_html>
...
</Directory>
</Location>
```
Note that the reverse proxy we have set up will forward requests *unencrypted* to the geoserver at port 8080, but because this happens within a single machine, there is no need to encrypt it.
Now ensure the proxy mod is installed:
```
$ a2enmod proxy
```
and restart the server:
```
$ sudo service apache2 restart
```
One other thing we had to do was ensure that Jetty/geoserver were only listening for requests locally. This requies binding Jetty to the IP address 127.0.0.1.
To do this, we modify one parameter in `app.ini`:
```
jetty.host=127.0.0.1
```
Restart geoserver:
```
killall geoserver && sh /usr/share/geoserver/bin/startup.sh
```
## Finishing Touches
Because Geosever was setup in order to be used in a dev environment for an xcode project, we needed to be able to ping a wms service from the site.
The attempt resulted in [an error](https://gist.github.com/Smallmelo/acb41ea71dea6ca64b0652973ed04158).
[This line](https://gist.github.com/Smallmelo/acb41ea71dea6ca64b0652973ed04158#file-gistfile1-txt-L2572) demonstrates that your network trace is seeing "localhost:8080", which it should not. So, it's an indication that the server might be returning URLs to resources that say "localhost:8080"
### The solution:
Update the proxy url in Geoserver's Global Settings:
![Geoserver proxy settings](https://i.imgur.com/pQYIT0v.png)

26
docs/index.md

@ -1,26 +0,0 @@
# Wisko Manual
The wisko manual.
IP: 159.65.75.41
[git repo - wisko manual](https://git.charlesreid1.com/charlesreid1/wisko-manual) by @charles
[git repo - wisko dotfiles](https://git.charlesreid1.com/dotfiles/wisko) by @charles
[wisko boot to root](/boot2root.md) by @charles
[wisko FAQ](/faq.md) by @charles
[locked out of wisko](/locked-out.md) by @melo and @charles
[smallmelo.com migration: part 1 (ssh + wordpress)](/smallmelo-migration-1.md) by @melo
[smallmelo.com migration: part 2 (all the things)](/smallmelo-migration-2.md) by @melo
[smallmelo.com migration: part 3 (allthehatsformaps to smallmelo)](/smallmelo-migration-3.md) by @melo
[wisko gitea](/wisko-gitea.md) by @charles
[installing geoserver and connecting over https](/geoserver-https.md) by @melo and @charles

255
docs/locked-out.md

@ -1,255 +0,0 @@
# locked out of wisko
no problem, i got this.
```
$ ssh melo@159.65.75.41
ECDSA key fingerprint is ...
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '159.65.75.41' (ECDSA) to the list of known hosts.
melo@159.65.75.41: Permission denied (publickey).
```
oh, so i have to generate a new key pair. lemme google that.
## creating a new public key
[help from do](https://www.digitalocean.com/community/tutorials/how-to-use-ssh-keys-with-digitalocean-droplets)
```
ssh-keygen -t rsa
Enter file in which to save the key (/Users/melo/.ssh/id_rsa):
```
hit enter to store in user ssh root folder
```
Enter passphrase (empty for no passphrase):
Enter same passphrase again
```
hit enter to store without passphrase
## copy key to do account
run from the command line:
```
cat ~/.ssh/id_rsa.pub
```
open settings > security in do, selection to add new key
paste in the above key and name it accordingly
## login/ add my key to the server
(**WARNING:** possibly bad to run these commands.)
```
cat ~/.ssh/id_rsa.pub | ssh melo@159.65.75.41 "cat >> /home/melo/.ssh/authorized_keys"
melo@159.65.75.41: Permission denied (publickey).
```
no?
```
cat ~/.ssh/id\_rsa.pub | ssh root@159.65.75.41 "cat >> ~/.ssh/authorized\_keys"
root@159.65.75.41: Permission denied (publickey).
```
oh yea, charles turned off root access via command line.
## ssh debug mode w/ charles
```
ssh -vvv melo@159.65.75.41
root@159.65.75.41: Permission denied (publickey).
Melo:~ melo$ ssh -vvv melo@159.65.75.41
OpenSSH_7.6p1, LibreSSL 2.6.2
debug1: Reading configuration data /Users/melo/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to 159.65.75.41 port 22.
debug1: Connection established.
debug1: identity file /Users/melo/.ssh/id_rsa type 0
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_ed25519-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.6
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.4 pat OpenSSH* compat 0x04000000
debug3: fd 5 is O_NONBLOCK
debug1: Authenticating to 159.65.75.41:22 as 'melo'
debug3: hostkeys_foreach: reading file "/Users/melo/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /Users/melo/.ssh/known_hosts:20
debug3: load_hostkeys: loaded 1 keys from 159.65.75.41
debug3: order_hostkeyalgs: prefer hostkeyalgs: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent
debug3: receive packet: type 20
debug1: SSH2_MSG_KEXINIT received
debug2: local client KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c
debug2: host key algorithms: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,zlib@openssh.com,zlib
debug2: compression stoc: none,zlib@openssh.com,zlib
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug2: peer server KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
debug2: host key algorithms: ssh-rsa,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519
debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,zlib@openssh.com
debug2: compression stoc: none,zlib@openssh.com
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug1: kex: algorithm: curve25519-sha256@libssh.org
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug3: send packet: type 30
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug3: receive packet: type 31
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:y1jQr+0TsjhrdM3TGWSZ/BGNdzxrK7u+hUXS/TzS1ss
debug3: hostkeys_foreach: reading file "/Users/melo/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /Users/melo/.ssh/known_hosts:20
debug3: load_hostkeys: loaded 1 keys from 159.65.75.41
debug1: Host '159.65.75.41' is known and matches the ECDSA host key.
debug1: Found key in /Users/melo/.ssh/known_hosts:20
debug3: send packet: type 21
debug2: set_newkeys: mode 1
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: receive packet: type 21
debug1: SSH2_MSG_NEWKEYS received
debug2: set_newkeys: mode 0
debug1: rekey after 134217728 blocks
debug2: key: /Users/melo/.ssh/id_rsa (0x7f897241b200)
debug2: key: /Users/melo/.ssh/id_dsa (0x0)
debug2: key: /Users/melo/.ssh/id_ecdsa (0x0)
debug2: key: /Users/melo/.ssh/id_ed25519 (0x0)
debug3: send packet: type 5
debug3: receive packet: type 7
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<rsa-sha2-256,rsa-sha2-512>
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering public key: RSA SHA256:iIOTgB1gfdbEi11gdn426XlamlH53riKdLqImE22zi8 /Users/melo/.ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug1: Trying private key: /Users/melo/.ssh/id_dsa
debug3: no such identity: /Users/melo/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /Users/melo/.ssh/id_ecdsa
debug3: no such identity: /Users/melo/.ssh/id_ecdsa: No such file or directory
debug1: Trying private key: /Users/melo/.ssh/id_ed25519
debug3: no such identity: /Users/melo/.ssh/id_ed25519: No such file or directory
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
melo@159.65.75.41: Permission denied (publickey).
```
Error message is totally unhelpful. Googling turns up some problems with file permissions and with public key access being disabled in SSH config file.
Logged in via DO, opened a console on the machine (Droplets > More > Access console), and found that the ssh folder was owned by root. Nobody can log in via ssh. Charles updated the permissions:
```
sudo chown -R melo:melo ~/.ssh
sudo chmod 700 ~/.ssh
sudo chmod 600 ~/.ssh/*
```
This still didn't work.
Finally, uninstalling/reinstalling openssh did the trick:
```
sudo apt-get purge openssh-client openssh-server
sudo apt-get install openssh-client openssh-server
```
then remove the `.ssh` folder in the root user's home directory. Regenerate the keys as the root user:
```
ssh-keygen
```
Now the machine should be ready to run the reinstalled SSH server.
To enable passwordless access, assuming you are connecting from a local machine (Mac) to a remote machine (wisko):
On the Mac: generate your ssh key:
```
ssh-keygen
```
print your public key to the screen:
```
cat ~/.ssh/id_rsa.pub
```
Copy this key to the clipboard.
On the Mac, log in to wisko:
```
ssh melo@<wisko-ip>
```
Once you are logged in, edit the following file with your favorite text editor (e.g., nano):
```
nano ~/.ssh/authorized_keys
```
Add the public key from your Mac as the last line of the file. Save it and close it.
Now test out your passwordless access: SSH from the Mac to wisko. The changes should take effect immediately.
[Link to Uncle Chucky's Passwordless SSH Login Guide](http://charlesreid1.com/wiki/SSH#Passwordless_Login)

150
docs/smallmelo-migration-1.md

@ -1,150 +0,0 @@
# smallmelo.com migration part 1
## copy public ssh key to wisko
get public ssh key from local machine
```
cat ~/.ssh/id_rsa.pub
```
copy that log into wisko in seperate termibal window
```
nano .ssh/authorized_keys
```
paste in then exit
## changing the folder structure of my wordpress site
used [this site](https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-14-04-lts) to setup the folders the way i wanted them.
lots of nano-ing and reviewing later, ready to start making changes.
```
cd /var/www
```
make directory
```
sudo mkdir -p /var/www/allthehatsformaps.com/public_html
```
grant myself permission to access
```
sudo chown -R $USER:$USER /var/www/allthehatsformaps.com/public_html
```
create example page
```
nano /var/www/allthehatsformaps.com/public_html/index.html
```
ugh, do some renaming
```
sudo mv allthehatsformaps.com allthehatsformaps
sudo chown -R $USER:$USER /var/www/allthehatsformaps/public_html
```
add my html content accordingly, then make a copy of the conf file
```
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/allthehatsformaps.conf
nano allthehatsformaps.conf
```
grant permissions
```
sudo chown -R $USER:$USER /etc/apache2/sites-available/allthehatsformaps.conf
```
edited my new config file
```
ServerName allthehatsformaps.com
ServerAlias www.allthehatsformaps.com
ServerAdmin melo@allthehatsformaps.com
DocumentRoot /var/www/allthehatsformaps/public_html
```
disable charles' site & enable my new one
```
sudo a2dissite 000-default.conf
sudo a2ensite allthehatsformaps.conf
service apache2 reload
```
copy wordpress folder from htdocs to my new folder
```
sudo mv /var/www/htdocs/wordpress /var/www/allthehatsformaps/public_html
```
oops... that moved the entire folder, i just wanted to move its contents.
```
cd /var/www/allthehatsformaps/public_html
sudo mv wordpress/* .
rmdir wordpress
rm index.html
```
going to allthehatsformaps.com works
going to allthehatsformaps.com/wp-admin tries to redirect to http://159.65.75.41/wordpress/wp-login.php?redirect_to=http%3A%2F%2Fallthehatsformaps.com%2Fwp-admin%2F&reauth=1 and throws a 404 error
went instead to:
http://159.65.75.41/wp-login.php
copy back the wordpress folder into htdocs
```
sudo cp /var/www/allthehatsformaps/public_html/* /var/www/htdocs/wordpress
```
disable my site config and enable old one
```
sudo a2dissite allthehatsformaps.conf
sudo a2ensite 000-default.conf
service apache2 reload
```
went to the wordpress login and signed in
under settings removed "wordpress" subfolder from the site url
disable charles' site & enable my new one
```
sudo a2dissite 000-default.conf
sudo a2ensite allthehatsformaps.conf
service apache2 reload
```
logged back into wordpress and changed the url to: http://allthehatsformaps.com
removed the old wordpress folder in htdocs:
```
sudo rm -r wordpress
```
cd back into the new wordpress and added a .htaccess file with the following:
```
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
```
then gave wordpress permission to edit it, according [to this site](https://stackoverflow.com/questions/23388144/wordpress-apache-permalinks-not-working-404-error)

42
docs/smallmelo-migration-2.md

@ -1,42 +0,0 @@
# smallmelo.com migration part 2 (all the things)
## grant melo permission to create files and upload via sftp using filezilla
used [these](https://www.digitalocean.com/community/questions/i-can-t-seem-to-grant-myself-write-permissions-to-the-www-directory) instructions
## copied html/php files into var/www/smallmelo
using filazilla
## add the dns records to dreamhost to point to the server
159.65.75.41 (a)
www smallmelo.com (cname)
## create new conf file for smallmelo
```
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/smallmelo.conf
```
## edit the conf file to point to smallmelo.com
## enable the site
```
sudo a2ensite smallmelo.conf
service apache2 reload
```
## make a backup copy all files from smallmelo.com
## made a basic index.html file
## turn off hosting by dreamhost
## restart apache2
```
sudo service apache2 restart
```

86
docs/smallmelo-migration-3.md

@ -1,86 +0,0 @@
# smallmelo.com migration part 3 (allthehatsformaps to smallmelo)
## remove placeholder file
```
sudo rm index.html
```
## copy the files to smallmelo
```
sudo cp -a /var/www/allthehatsformaps/public_html/* /var/www/smallmelo/public_html
```
## update the site in wordpress
logged back into wordpress and changed the url to: [http://smallmelo.com](http://smallmelo.com/)
## copy the relevent stuff over to the smallmelo.conf
```
<Directory /var/www/smallmelo/public_html/>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
```
## disable and enable sites
```
sudo a2dissite allthehatsformaps.conf
sudo a2ensite smallmelo.conf
sudo /etc/init.d/apache2 restart
```
## give permissions
```
sudo chown -v :www-data /var/www/smallmelo/public_html/.htaccess
sudo chmod -v 664 "/var/www/smallmelo/public_html/.htaccess"
```
## reboot
```
sudo /etc/init.d/apache2 restart
```
## disabled, reenabled, reload
```
sudo a2dissite smallmelo.conf
sudo a2ensite smallmelo.conf
sudo /etc/init.d/apache2 restart
service apache2 reload
```
## disabling allthehats
```
sudo rm allthehatsformaps.conf
service apache2 reload
```
## in the /var/wwww
```
sudo rm -r allthehatsformaps
```
## in dreamhost
remove wisko DNS records
setup redirect

272
docs/wisko-gitea.md

@ -1,272 +0,0 @@
# wisko gitea
## before you begin: gitea setup info
(see [wisko setup](https://hackmd.io/s/BkfqUw0wz) for details on how gitea was set up).
### where is gitea
The wisko gitea instance is installed to `$GOPATH/src/code.gitea.io/gitea` and there is a symlink to this directory at `~/gitea`.
This directory is actually a cloned git repo, so you can see what files you've modified from the default by running a `git status`.
The binary is in that folder, at `bin/gitea`.
### where is go
Go is installed using `goenv`, so the global version of go that goenv will set can be printed using:
```
goenv global
```
You can verify you have the goenv go installed by running:
```
which go
```
which should return `~/.goenv/shims/go`, and
```
go version
```
which should return 1.7.5.
## task summary
Making gitea available via the subdomain `git.smallmelo.com` requires setting up a couple of components:
* subdomain
* web server to handle redirects
* gitea configuration to tell gitea where it is hosted
* https certificates valid for the subdomain
## set up git subdomain
First thing is, we need to set up the subdomain `git.smallmelo.com` to redirect to the server. This depends on the hosting provider, but should be an A Name Record:
**A Record**:
- Record: git
- Value: <your ip address>
## apache web server settings
Setting up a name record for the subdomain will result in requests for "git.smallmelo.com" and "smallmelo.com" to both go to your server. The server will be able to see what domain/subdomain was requested in each request, so we need to set up rules to handle the subdomain correctly.
If the git subdomain is not set up with the DNS provider yet, you can still test it locally. From whatever machine you're connecting to wisk as, add an entry to `/etc/hosts` that will map the subdomain to wisko's IP:
```
vim /etc/hosts
```
and add
```
159.65.75.41 git.smallmelo.com
```
(Do this on your machine, not on wisko.)
### apache configuration: http
Now we'll set up the Apache web server to redirect any http requests to `git.smallmelo.com` on port 80 on to gitea at port 3000.
Create a new apache config for this site at `/etc/apache2/sites-available/git-smallmelo.conf` that will contain all our settings. Set up a listener on port 80, all interfaces, that looks for requests to `git.smallmelo.com`:
**`/etc/apache2/sites-available/git-smallmelo.conf`**:
```
<VirtualHost *:80>
ServerName git.smallmelo.com
ServerAdmin melo@smallmelo.com
# -------------------------
# Need to enable the following mods:
# a2enmod proxy
# a2enmod proxy_http
# Preserve original request (git.smallmelo.com)
ProxyPreserveHost On
# Set up proxy
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
# -------------------------
ErrorLog ${APACHE_LOG_DIR}/git-smallmelo-error.log
CustomLog ${APACHE_LOG_DIR}/git-smallmelo-access.log combined
# Note that we don't set a document root
# or permissions for a web directory
# because we're just forwarding traffic
# to gitea, which runs an entirely separate
# web server.
</VirtualHost>
```
### apache configuration: https
We also need to set up Apache to redirect https requests to `git.smallmelo.com` on port 443 to gitea at port 3000.
This will require an HTTPS certificate for `git.smallmelo.com`, so fire up lets encrypt.
### making apache certificate
Create an https apache config for this site at `/etc/apache2/sites-available/git-smallmelo-le-ssl.conf` that will contain all our settings. Set up a listener on port 443, all interfaces, that looks for requests to `git.smallmelo.com`.
Run the certbot:
```
$ sudo certbot certonly --non-interactive --agree-tos --email "melo@smallmelo.com" --apache -d "git.smallmelo.com"
```
This will take a minute, but should conclude with:
```
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/git.smallmelo.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/git.smallmelo.com/privkey.pem
Your cert will expire on 2018-06-24. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
```
### apache configuration: https (revisited)
Note that once the HTTPS request hits the server, the proxy does not need to happen over HTTPS since it happens within a single machine.
**`/etc/apache2/sites-available/git-smallmelo-le-ssl.conf`**:
```
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName git.smallmelo.com
ServerAdmin melo@smallmelo.com
ErrorLog ${APACHE_LOG_DIR}/git-smallmelo-ssl-error.log
CustomLog ${APACHE_LOG_DIR}/git-smallmelo-ssl-access.log combined
# -------------------------
# Need to enable the following mods:
# a2enmod proxy
# a2enmod proxy_http
SSLEngine on
SSLProxyEngine On
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/git.smallmelo.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/git.smallmelo.com/privkey.pem
# Preserve original request (git.smallmelo.com)
ProxyPreserveHost On
# Set up proxy
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
# -------------------------
</VirtualHost>
</IfModule>
```
### enable and activate
Now enable the mods:
```
a2enmod proxy
a2enmod proxy_http
```
Now enable the site:
```
a2ensite git-smallmelo
a2ensite git-smallmelo-le-ssl
```
Now activate the site:
```
service apache2 reload
```
Once the A Name DNS record propagates, you can test out the Apache configuration.
Run a dummy HTTP web server on port 3000:
```
cat "<h2>hello world</h2>" > index.html
python3 -m http.server 3000
```
Now if you visit the subdomain:
```
http://git.smallmelo.com
```
you should see a hit in the window running the HTTP server on port 3000.
## gitea configuration
### gitea version
Start out by checking which version of gitea you have. We have checked out release `1.2`, which means that our git repo is in a "headless" state. Any changes that we make are going to go into a dead end.
But that's perfect - we can keep track of all our changes relative to version 1.2, and revert any changes we don't want anymore.
Make the following changes to the default `app.ini` gitea config file:
```
RUN_USER = melo
DOMAIN = git.smallmelo.com
ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s/
```
(Note, you can use git diff to pick up the changes in the file.)
Kill any instances of gitea that are already running on port 3000, and start up the gitea server:
```
cd ~/gitea
./gitea web
```
(or, do it in a screen, [as mentioned in the wisko setup doc](https://hackmd.io/s/BkfqUw0wz#Installing-Gitea)).
## https certs
See the above modifications to the document about certificates. A new SSL certificate for the git subdomain (`git.smallmelo.com`) was needed, so we used certbot to make it.
To explain the HTTPS certificate setup for git.smallmelo.com a bit more:
* Gitea runs its own web server, hosts its own files, and does not require an Apache server to run. We're just using Apache for convenience.
* Just as HTTP requests to smallmelo.com always go to port 80, where there is an Apache server listening, HTTPS requests to smallmelo.com always go to port 443, where there is also an Apache server listening
* HTTPS requests are handled by the Apache web server, so the certificates to create an encrypted session are handled by the Apache web server
* Apache must have an SSL certifiate for `git.smallmelo.com` to make the connection, or the browser will complain that the server is not configured correctly
* When we make a request for a gitea resource (say, `https://git.smallmelo.com/melo/my-cool-project`), the subdomain tells Apache where to forward the request (to gitea on port 3000), and the rest of the url (`/melo/my-cool-project`) is passed on to gitea, unmodified
* The request from Apache to gitea happens on a single machine, so the connection does not need to be encrypted, hence Apache's proxy requests go to `http://localhost:3000` and not `https://localhost:3000`

770
faq/index.html

@ -0,0 +1,770 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="lang:clipboard.copy" content="Copy to clipboard">
<meta name="lang:clipboard.copied" content="Copied to clipboard">
<meta name="lang:search.language" content="en">
<meta name="lang:search.pipeline.stopwords" content="True">
<meta name="lang:search.pipeline.trimmer" content="True">
<meta name="lang:search.result.none" content="No matching documents">
<meta name="lang:search.result.one" content="1 matching document">
<meta name="lang:search.result.other" content="# matching documents">
<meta name="lang:search.tokenizer" content="[\s\-]+">
<link rel="shortcut icon" href="../">
<meta name="generator" content="mkdocs-0.17.3, mkdocs-material-2.7.2">
<title>Wisko FAQ - the wisko manual</title>
<link rel="stylesheet" href="../assets/stylesheets/application.8d40d89b.css">
<link rel="stylesheet" href="../assets/stylesheets/application-palette.6079476c.css">
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
<svg class="md-svg">
<defs>
</defs>
</svg>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="search" autocomplete="off">
<label class="md-overlay" data-md-component="overlay" for="drawer"></label>
<a href="#wisko-faq" tabindex="1" class="md-skip">
Skip to content
</a>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid">
<div class="md-flex">
<div class="md-flex__cell md-flex__cell--shrink">
<a href=".." title="the wisko manual" class="md-header-nav__button md-logo">
<i class="md-icon">cloud</i>
</a>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--menu md-header-nav__button" for="drawer"></label>
</div>
<div class="md-flex__cell md-flex__cell--stretch">
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
<span class="md-header-nav__topic">
the wisko manual
</span>
<span class="md-header-nav__topic">
Wisko FAQ
</span>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--search md-header-nav__button" for="search"></label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
<label class="md-icon md-search__icon" for="search"></label>
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
&#xE5CD;
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="result">
<div class="md-search-result__meta">
Type to start searching
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container">
<main class="md-main">
<div class="md-main__inner md-grid" data-md-component="container">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title md-nav__title--site" for="drawer">
<span class="md-nav__button md-logo">
<i class="md-icon">cloud</i>
</span>
the wisko manual
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." title="Index" class="md-nav__link">
Index
</a>
</li>
<li class="md-nav__item">
<a href="../boot2root/" title="Wisko Boot to Root" class="md-nav__link">
Wisko Boot to Root
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="toc">
<label class="md-nav__link md-nav__link--active" for="toc">
Wisko FAQ
</label>
<a href="./" title="Wisko FAQ" class="md-nav__link md-nav__link--active">
Wisko FAQ
</a>
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#apache" title="Apache" class="md-nav__link">
Apache
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#running-apache2" title="running apache2" class="md-nav__link">
running apache2
</a>
</li>
<li class="md-nav__item">
<a href="#apache2-configuration-files" title="apache2 configuration files" class="md-nav__link">
apache2 configuration files
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#php" title="PHP" class="md-nav__link">
PHP
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#running-php" title="running php" class="md-nav__link">
running php
</a>
</li>
<li class="md-nav__item">
<a href="#php-configuration-files" title="php configuration files" class="md-nav__link">
php configuration files
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#mysql" title="MySQL" class="md-nav__link">
MySQL
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#networking" title="networking" class="md-nav__link">
networking
</a>
</li>
<li class="md-nav__item">
<a href="#running-mysql" title="running mysql" class="md-nav__link">
running mysql
</a>
</li>
<li class="md-nav__item">
<a href="#mysql-configuration-files" title="mysql configuration files" class="md-nav__link">
mysql configuration files
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#gitea" title="Gitea" class="md-nav__link">
Gitea
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#gitea-locations" title="gitea locations" class="md-nav__link">
gitea locations
</a>
</li>
<li class="md-nav__item">
<a href="#running-gitea" title="running gitea" class="md-nav__link">
running gitea
</a>
</li>
<li class="md-nav__item">
<a href="#rebuilding-gitea" title="rebuilding gitea" class="md-nav__link">
rebuilding gitea
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../locked-out/" title="Locked Out of Wisko" class="md-nav__link">
Locked Out of Wisko
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-1/" title="smallmelo.com Migration: Part 1" class="md-nav__link">
smallmelo.com Migration: Part 1
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-2/" title="smallmelo.com Migration: Part 2" class="md-nav__link">
smallmelo.com Migration: Part 2
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-3/" title="smallmelo.com Migration: Part 3" class="md-nav__link">
smallmelo.com Migration: Part 3
</a>
</li>
<li class="md-nav__item">
<a href="../wisko-gitea/" title="Wisko Gitea" class="md-nav__link">
Wisko Gitea
</a>
</li>
<li class="md-nav__item">
<a href="../geoserver-https/" title="Connecting to Geoserver Over HTTPS" class="md-nav__link">
Connecting to Geoserver Over HTTPS
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#apache" title="Apache" class="md-nav__link">
Apache
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#running-apache2" title="running apache2" class="md-nav__link">
running apache2
</a>
</li>
<li class="md-nav__item">
<a href="#apache2-configuration-files" title="apache2 configuration files" class="md-nav__link">
apache2 configuration files
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#php" title="PHP" class="md-nav__link">
PHP
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#running-php" title="running php" class="md-nav__link">
running php
</a>
</li>
<li class="md-nav__item">
<a href="#php-configuration-files" title="php configuration files" class="md-nav__link">
php configuration files
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#mysql" title="MySQL" class="md-nav__link">
MySQL
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#networking" title="networking" class="md-nav__link">
networking
</a>
</li>
<li class="md-nav__item">
<a href="#running-mysql" title="running mysql" class="md-nav__link">
running mysql
</a>
</li>
<li class="md-nav__item">
<a href="#mysql-configuration-files" title="mysql configuration files" class="md-nav__link">
mysql configuration files
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#gitea" title="Gitea" class="md-nav__link">
Gitea
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#gitea-locations" title="gitea locations" class="md-nav__link">
gitea locations
</a>
</li>
<li class="md-nav__item">
<a href="#running-gitea" title="running gitea" class="md-nav__link">
running gitea
</a>
</li>
<li class="md-nav__item">
<a href="#rebuilding-gitea" title="rebuilding gitea" class="md-nav__link">
rebuilding gitea
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1 id="wisko-faq">wisko FAQ</h1>
<h2 id="apache">Apache</h2>
<p>Link: <a href="https://help.ubuntu.com/lts/serverguide/httpd.html">Apache on the Ubuntu Wiki</a></p>
<p>Apache 2 was installed using the command <code>apt-get install apache2</code>.</p>
<h3 id="running-apache2">running apache2</h3>
<p>To start, restart, or stop apache2 (it should start automatically on boot):</p>
<pre><code>$ sudo service apache2 start
$ sudo service apache2 restart
$ sudo service apache2 stop
</code></pre>
<h3 id="apache2-configuration-files">apache2 configuration files</h3>
<p>Apache keeps its configuration files in <code>/etc/apache2/</code>.</p>
<p>Apache is configured to host multiple websites, so there are multiple configuration files. </p>
<p>The global Apache config file is <code>/etc/apache2/apache2.conf</code>.</p>
<p>Site-specific Apache config files are in <code>/etc/apache2/sites-available</code>. To make a new site, just add a new file to that folder (name it whatever you'd like). There is an existing default configuration in that folder.</p>
<p>The site configuration file is where you edit the folder it serves up, the port it listens on, what requests it is listening for (subdomain or full domain), etc.</p>
<p>When you have edited a site's configuration file, enable it using the <code>a2ensite</code> command:</p>
<pre><code>$ a2ensite name_of_site
</code></pre>
<p>Likewise, disable the site with <code>a2dissite</code>:</p>
<pre><code>$ a2dissite name_of_site
</code></pre>
<h2 id="php">PHP</h2>
<p>Link: <a href="https://help.ubuntu.com/community/ApacheMySQLPHP">LAMP Server on Ubuntu Wiki</a></p>
<p>PHP was installed using aptitude.</p>
<h3 id="running-php">running php</h3>
<p>PHP is a programming language designed for web browsers, so you don't need to start it - Apache will handle that. (Apache has a PHP module that has been enabled.)</p>
<h3 id="php-configuration-files">php configuration files</h3>
<p>PHP also has multiple configuration files, but we're only interested in the Apache-PHP configuration file at <code>/etc/php5/apache2/php.ini</code>. The main thing that you would change here is the max file upload size (10 MB by default) and whether PHP prints out errors ("debug" mode).</p>
<h2 id="mysql">MySQL</h2>
<p>Link: <a href="https://help.ubuntu.com/lts/serverguide/mysql.html">MySQL on Ubuntu Wiki</a></p>
<p>MySQL server was installed using aptitude.</p>
<h3 id="networking">networking</h3>
<p>MySQL will listen on port 3306 for incoming requests on the local machine <em>only</em> (it is bound to the address 127.0.0.1:3306). That means no outside computers can communicate with MySQL. This can be changed in the configuration file.</p>
<h3 id="running-mysql">running mysql</h3>
<p>To run the MySQL server in the background (it should start automatically on boot), run:</p>
<pre><code>$ sudo service mysql start
</code></pre>
<p>To get a MySQL shell, run MySQL from the command line:</p>
<pre><code>$ mysql -u root -p
</code></pre>
<p>This will prompt you for your MySQL password.</p>
<p>To make a new MySQL user, log in as the root user and run:</p>
<pre><code>mysql&gt; CREATE USER 'newuser'@'localhost' IDENTIFIED BY &quot;newpassword&quot;;
</code></pre>
<p>To create a database and give the new user permission to edit that database:</p>
<pre><code>mysql&gt; CREATE DATABASE newdb;
mysql&gt; GRANT ALL PRIVILEGES ON newdb.* TO &quot;newuser&quot;@&quot;localhost&quot;;
</code></pre>
<p>MySQL is picky about quotations.</p>
<h3 id="mysql-configuration-files">mysql configuration files</h3>
<p>The main MySQL configuration file is in <code>/etc/mysql/mysql.cnf</code>.</p>
<p>The MySQL configuration file that you should edit is at <code>/etc/mysql/mysql.conf.d/mysql.cnf</code>.</p>
<h2 id="gitea">Gitea</h2>
<h3 id="gitea-locations">gitea locations</h3>
<p>Gitea was installed using <code>go get</code>, which integrates Go with Github. The command checked out a copy of the code in the directory specified by <code>$GOCODE</code>, which is at <code>~/gocode</code>.</p>
<p>The gitea source is located in <code>/home/melo/gocode/src/code.gitea.io/gitea/</code>, which is symlinked to <code>~melo/gitea/</code>.</p>
<h3 id="running-gitea">running gitea</h3>
<p>Gitea will <em>not</em> run on boot - a startup service needs to be added in <code>/etc/init.d/gitea</code> that will run the gitea command as user <code>melo</code>.</p>
<p>The Gitea web server is a binary Go program that bundles together everything it needs to run. The binary is built and run in the directory <code>~melo/gocode/src/code.gitea.io/gitea</code> (both as the user <code>melo</code>). </p>
<p>To run the binary, you would execute it with the "web" argument:</p>
<pre><code>$ cd ~/gocode/src/code.gitea.io/gitea/
$ ./gitea web
</code></pre>
<p>However, this starts the process in the foreground, so it's more convenient to run it in a screen (which allows you to detach from a shell, end your session, and reattach to that shell in a later session).</p>
<pre><code>$ screen -d -m -S giteaweb $HOME/gocode/src/code.gitea.io/gitea/gitea web
</code></pre>
<p>This will start a new screen in detached mode (<code>-d -m</code>), call it <code>giteaweb</code> (<code>-S</code>), and run the command <code>gitea web</code>.</p>
<p>To reattach, list your screens using the <code>-ls</code> flag and reattach using the <code>-r</code> flag:</p>
<pre><code>$ screen -ls
$ screen -r giteaweb
</code></pre>
<h3 id="rebuilding-gitea">rebuilding gitea</h3>
<p>The gitea source directory at <code>~/gocode/src/code.gitea.io/gitea</code> is a cloned git repository, so you can check out different versions or branches as needed. If you make changes to the configuration file or template files, you will also need to re-make the gitea binary (since all of that is bundled up in the binary).</p>
<p>To remake the binary:</p>
<pre><code>$ cd $GOCODE/src/code.gitea.io/gitea/
# here you can do stuff like
# git branch -a
# git checkout v1.3
$ TAGS=&quot;bindata&quot; make generate build
</code></pre>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="../boot2root/" title="Wisko Boot to Root" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
Wisko Boot to Root
</span>
</div>
</a>
<a href="../locked-out/" title="Locked Out of Wisko" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
Locked Out of Wisko
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright 2018 Charles Reid
</div>
powered by
<a href="http://www.mkdocs.org">MkDocs</a>
and
<a href="https://squidfunk.github.io/mkdocs-material/">
Material for MkDocs</a>
</div>
</div>
</div>
</footer>
</div>
<script src="../assets/javascripts/application.0cf9b500.js"></script>
<script>app.initialize({version:"0.17.3",url:{base:".."}})</script>
<script src="../search/require.js"></script>
<script src="../search/search.js"></script>
</body>
</html>

656
geoserver-https/index.html

@ -0,0 +1,656 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="lang:clipboard.copy" content="Copy to clipboard">
<meta name="lang:clipboard.copied" content="Copied to clipboard">
<meta name="lang:search.language" content="en">
<meta name="lang:search.pipeline.stopwords" content="True">
<meta name="lang:search.pipeline.trimmer" content="True">
<meta name="lang:search.result.none" content="No matching documents">
<meta name="lang:search.result.one" content="1 matching document">
<meta name="lang:search.result.other" content="# matching documents">
<meta name="lang:search.tokenizer" content="[\s\-]+">
<link rel="shortcut icon" href="../">
<meta name="generator" content="mkdocs-0.17.3, mkdocs-material-2.7.2">
<title>Connecting to Geoserver Over HTTPS - the wisko manual</title>
<link rel="stylesheet" href="../assets/stylesheets/application.8d40d89b.css">
<link rel="stylesheet" href="../assets/stylesheets/application-palette.6079476c.css">
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
<svg class="md-svg">
<defs>
</defs>
</svg>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="search" autocomplete="off">
<label class="md-overlay" data-md-component="overlay" for="drawer"></label>
<a href="#installing-geoserver-connecting-over-https" tabindex="1" class="md-skip">
Skip to content
</a>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid">
<div class="md-flex">
<div class="md-flex__cell md-flex__cell--shrink">
<a href=".." title="the wisko manual" class="md-header-nav__button md-logo">
<i class="md-icon">cloud</i>
</a>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--menu md-header-nav__button" for="drawer"></label>
</div>
<div class="md-flex__cell md-flex__cell--stretch">
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
<span class="md-header-nav__topic">
the wisko manual
</span>
<span class="md-header-nav__topic">
Connecting to Geoserver Over HTTPS
</span>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--search md-header-nav__button" for="search"></label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
<label class="md-icon md-search__icon" for="search"></label>
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
&#xE5CD;
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="result">
<div class="md-search-result__meta">
Type to start searching
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container">
<main class="md-main">
<div class="md-main__inner md-grid" data-md-component="container">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title md-nav__title--site" for="drawer">
<span class="md-nav__button md-logo">
<i class="md-icon">cloud</i>
</span>
the wisko manual
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." title="Index" class="md-nav__link">
Index
</a>
</li>
<li class="md-nav__item">
<a href="../boot2root/" title="Wisko Boot to Root" class="md-nav__link">
Wisko Boot to Root
</a>
</li>
<li class="md-nav__item">
<a href="../faq/" title="Wisko FAQ" class="md-nav__link">
Wisko FAQ
</a>
</li>
<li class="md-nav__item">
<a href="../locked-out/" title="Locked Out of Wisko" class="md-nav__link">
Locked Out of Wisko
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-1/" title="smallmelo.com Migration: Part 1" class="md-nav__link">
smallmelo.com Migration: Part 1
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-2/" title="smallmelo.com Migration: Part 2" class="md-nav__link">
smallmelo.com Migration: Part 2
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-3/" title="smallmelo.com Migration: Part 3" class="md-nav__link">
smallmelo.com Migration: Part 3
</a>
</li>
<li class="md-nav__item">
<a href="../wisko-gitea/" title="Wisko Gitea" class="md-nav__link">
Wisko Gitea
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="toc">
<label class="md-nav__link md-nav__link--active" for="toc">
Connecting to Geoserver Over HTTPS
</label>
<a href="./" title="Connecting to Geoserver Over HTTPS" class="md-nav__link md-nav__link--active">
Connecting to Geoserver Over HTTPS
</a>
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#install-jre-8" title="Install JRE 8" class="md-nav__link">
Install JRE 8
</a>
</li>
<li class="md-nav__item">
<a href="#create-geoserver-folder" title="Create geoserver folder" class="md-nav__link">
Create geoserver folder
</a>
</li>
<li class="md-nav__item">
<a href="#downloaded-geoserver-on-my-computer-then-ftp-it-to-wisko" title="Downloaded geoserver on my computer, then ftp it to wisko" class="md-nav__link">
Downloaded geoserver on my computer, then ftp it to wisko
</a>
</li>
<li class="md-nav__item">
<a href="#add-env-variable" title="add env variable" class="md-nav__link">
add env variable
</a>
</li>
<li class="md-nav__item">
<a href="#make-myself-the-owner" title="make myself the owner" class="md-nav__link">
make myself the owner
</a>
</li>
<li class="md-nav__item">
<a href="#start-geoserver" title="start geoserver" class="md-nav__link">
start geoserver
</a>
</li>
<li class="md-nav__item">
<a href="#setting-up-certs" title="setting up certs" class="md-nav__link">
setting up certs
</a>
</li>
<li class="md-nav__item">
<a href="#finishing-touches" title="Finishing Touches" class="md-nav__link">
Finishing Touches
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#the-solution" title="The solution:" class="md-nav__link">
The solution:
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#install-jre-8" title="Install JRE 8" class="md-nav__link">
Install JRE 8
</a>
</li>
<li class="md-nav__item">
<a href="#create-geoserver-folder" title="Create geoserver folder" class="md-nav__link">
Create geoserver folder
</a>
</li>
<li class="md-nav__item">
<a href="#downloaded-geoserver-on-my-computer-then-ftp-it-to-wisko" title="Downloaded geoserver on my computer, then ftp it to wisko" class="md-nav__link">
Downloaded geoserver on my computer, then ftp it to wisko
</a>
</li>
<li class="md-nav__item">
<a href="#add-env-variable" title="add env variable" class="md-nav__link">
add env variable
</a>
</li>
<li class="md-nav__item">
<a href="#make-myself-the-owner" title="make myself the owner" class="md-nav__link">
make myself the owner
</a>
</li>
<li class="md-nav__item">
<a href="#start-geoserver" title="start geoserver" class="md-nav__link">
start geoserver
</a>
</li>
<li class="md-nav__item">
<a href="#setting-up-certs" title="setting up certs" class="md-nav__link">
setting up certs
</a>
</li>
<li class="md-nav__item">
<a href="#finishing-touches" title="Finishing Touches" class="md-nav__link">
Finishing Touches
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#the-solution" title="The solution:" class="md-nav__link">
The solution:
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1 id="installing-geoserver-connecting-over-https">Installing Geoserver &amp; Connecting Over HTTPS</h1>
<p><a href="http://docs.geoserver.org/stable/en/user/installation/linux.html">Installing Geoserver instructions</a></p>
<h2 id="install-jre-8">Install JRE 8</h2>
<p><a href="https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04">install jre 8</a></p>
<pre><code>sudo apt-get update
sudo apt-get install default-jre
</code></pre>
<h2 id="create-geoserver-folder">Create geoserver folder</h2>
<p>in <code>/usr/share</code>:</p>
<pre><code>mkdir geoserver
</code></pre>
<h2 id="downloaded-geoserver-on-my-computer-then-ftp-it-to-wisko">Downloaded geoserver on my computer, then ftp it to wisko</h2>
<ul>
<li>Download geoserver files on my computer</li>
<li>unzip</li>
<li>copy files from the geoserver folder onto wisko:</li>
</ul>
<p>from my computer:</p>
<pre><code>scp -r /Users/melo/Desktop/geoserver-2.13.0 melo@159.65.75.41:/usr/share/geoserver
</code></pre>
<p>permission denied. fixed with:</p>
<pre><code>sudo chown -R $USER:$USER /usr/share/geoserver
</code></pre>
<p>but then i decided to use FileZilla to transfer the files once I fixed my pemissions. Maybe another day, scp.</p>
<h2 id="add-env-variable">add env variable</h2>
<p><code>echo "export GEOSERVER_HOME=/usr/share/geoserver" &gt;\&gt; ~/.profile</code></p>
<h2 id="make-myself-the-owner">make myself the owner</h2>
<p><code>sudo chown -R USER_NAME /usr/share/geoserver/</code></p>
<h2 id="start-geoserver">start geoserver</h2>
<pre><code>cd /usr/share/geoserver/bin
sh startup.sh
</code></pre>
<hr />
<h2 id="setting-up-certs">setting up certs</h2>
<p>To enable SSL connections to the geoserver, let Apache handle the SSL connections, and then pass the requests on to geoserver locally.</p>
<p>Apache already has certificates living at:</p>
<pre><code>/etc/letsencrypt/live/smallmelo.com
</code></pre>
<p>and an HTTPS configuration file at:</p>
<pre><code>/etc/apache2/sites-avaiable/smallmelo-le-ssl.conf
</code></pre>
<p>Modify the SSL configuration file to accept any URLs ending in <code>geoserver/</code> and forward them to the geoserver on port 8080.</p>
<p>There should be a <code>&lt;VirtualHost&gt;</code> block that controls the settings for HTTPS requests. Add a <code>&lt;Location&gt;</code> block to configure the behavior for geoserver URLs (note the order):</p>
<pre><code>&lt;VirtualHost *:443&gt;
...
# This block is new:
&lt;Location /geoserver&gt;
ProxyPass http://localhost:8080/geoserver
ProxyPassReverse http://localhost:8080/geoserver
Order allow,deny
Allow from all
&lt;/Location&gt;
...
# This must come after /geoserver block
&lt;Directory /var/www/smallmelo/public_html&gt;
...
&lt;/Directory&gt;
&lt;/Location&gt;
</code></pre>
<p>Note that the reverse proxy we have set up will forward requests <em>unencrypted</em> to the geoserver at port 8080, but because this happens within a single machine, there is no need to encrypt it.</p>
<p>Now ensure the proxy mod is installed:</p>
<pre><code>$ a2enmod proxy
</code></pre>
<p>and restart the server:</p>
<pre><code>$ sudo service apache2 restart
</code></pre>
<p>One other thing we had to do was ensure that Jetty/geoserver were only listening for requests locally. This requies binding Jetty to the IP address 127.0.0.1.</p>
<p>To do this, we modify one parameter in <code>app.ini</code>:</p>
<pre><code>jetty.host=127.0.0.1
</code></pre>
<p>Restart geoserver:</p>
<pre><code>killall geoserver &amp;&amp; sh /usr/share/geoserver/bin/startup.sh
</code></pre>
<h2 id="finishing-touches">Finishing Touches</h2>
<p>Because Geosever was setup in order to be used in a dev environment for an xcode project, we needed to be able to ping a wms service from the site. </p>
<p>The attempt resulted in <a href="https://gist.github.com/Smallmelo/acb41ea71dea6ca64b0652973ed04158">an error</a>.</p>
<p><a href="https://gist.github.com/Smallmelo/acb41ea71dea6ca64b0652973ed04158#file-gistfile1-txt-L2572">This line</a> demonstrates that your network trace is seeing "localhost:8080", which it should not. So, it's an indication that the server might be returning URLs to resources that say "localhost:8080"</p>
<h3 id="the-solution">The solution:</h3>
<p>Update the proxy url in Geoserver's Global Settings:
<img alt="Geoserver proxy settings" src="https://i.imgur.com/pQYIT0v.png" /></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="../wisko-gitea/" title="Wisko Gitea" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
Wisko Gitea
</span>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright 2018 Charles Reid
</div>
powered by
<a href="http://www.mkdocs.org">MkDocs</a>
and
<a href="https://squidfunk.github.io/mkdocs-material/">
Material for MkDocs</a>
</div>
</div>
</div>
</footer>
</div>
<script src="../assets/javascripts/application.0cf9b500.js"></script>
<script>app.initialize({version:"0.17.3",url:{base:".."}})</script>
<script src="../search/require.js"></script>
<script src="../search/search.js"></script>
</body>
</html>

401
index.html

@ -0,0 +1,401 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="lang:clipboard.copy" content="Copy to clipboard">
<meta name="lang:clipboard.copied" content="Copied to clipboard">
<meta name="lang:search.language" content="en">
<meta name="lang:search.pipeline.stopwords" content="True">
<meta name="lang:search.pipeline.trimmer" content="True">
<meta name="lang:search.result.none" content="No matching documents">
<meta name="lang:search.result.one" content="1 matching document">
<meta name="lang:search.result.other" content="# matching documents">
<meta name="lang:search.tokenizer" content="[\s\-]+">
<link rel="shortcut icon" href="./">
<meta name="generator" content="mkdocs-0.17.3, mkdocs-material-2.7.2">
<title>the wisko manual</title>
<link rel="stylesheet" href="./assets/stylesheets/application.8d40d89b.css">
<link rel="stylesheet" href="./assets/stylesheets/application-palette.6079476c.css">
<script src="./assets/javascripts/modernizr.1aa3b519.js"></script>
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="./css/custom.css">
</head>
<body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
<svg class="md-svg">
<defs>
</defs>
</svg>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="search" autocomplete="off">
<label class="md-overlay" data-md-component="overlay" for="drawer"></label>
<a href="#wisko-manual" tabindex="1" class="md-skip">
Skip to content
</a>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid">
<div class="md-flex">
<div class="md-flex__cell md-flex__cell--shrink">
<a href="." title="the wisko manual" class="md-header-nav__button md-logo">
<i class="md-icon">cloud</i>
</a>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--menu md-header-nav__button" for="drawer"></label>
</div>
<div class="md-flex__cell md-flex__cell--stretch">
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
<span class="md-header-nav__topic">
the wisko manual
</span>
<span class="md-header-nav__topic">
Index
</span>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--search md-header-nav__button" for="search"></label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
<label class="md-icon md-search__icon" for="search"></label>
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
&#xE5CD;
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="result">
<div class="md-search-result__meta">
Type to start searching
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container">
<main class="md-main">
<div class="md-main__inner md-grid" data-md-component="container">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title md-nav__title--site" for="drawer">
<span class="md-nav__button md-logo">
<i class="md-icon">cloud</i>
</span>
the wisko manual
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="toc">
<a href="." title="Index" class="md-nav__link md-nav__link--active">
Index
</a>
</li>
<li class="md-nav__item">
<a href="boot2root/" title="Wisko Boot to Root" class="md-nav__link">
Wisko Boot to Root
</a>
</li>
<li class="md-nav__item">
<a href="faq/" title="Wisko FAQ" class="md-nav__link">
Wisko FAQ
</a>
</li>
<li class="md-nav__item">
<a href="locked-out/" title="Locked Out of Wisko" class="md-nav__link">
Locked Out of Wisko
</a>
</li>
<li class="md-nav__item">
<a href="smallmelo-migration-1/" title="smallmelo.com Migration: Part 1" class="md-nav__link">
smallmelo.com Migration: Part 1
</a>
</li>
<li class="md-nav__item">
<a href="smallmelo-migration-2/" title="smallmelo.com Migration: Part 2" class="md-nav__link">
smallmelo.com Migration: Part 2
</a>
</li>
<li class="md-nav__item">
<a href="smallmelo-migration-3/" title="smallmelo.com Migration: Part 3" class="md-nav__link">
smallmelo.com Migration: Part 3
</a>
</li>
<li class="md-nav__item">
<a href="wisko-gitea/" title="Wisko Gitea" class="md-nav__link">
Wisko Gitea
</a>
</li>
<li class="md-nav__item">
<a href="geoserver-https/" title="Connecting to Geoserver Over HTTPS" class="md-nav__link">
Connecting to Geoserver Over HTTPS
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary">
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1 id="wisko-manual">Wisko Manual</h1>
<p>The wisko manual.</p>
<p>IP: 159.65.75.41</p>
<p><a href="https://git.charlesreid1.com/charlesreid1/wisko-manual">git repo - wisko manual</a> by @charles</p>
<p><a href="https://git.charlesreid1.com/dotfiles/wisko">git repo - wisko dotfiles</a> by @charles</p>
<p><a href="boot2root/">wisko boot to root</a> by @charles</p>
<p><a href="faq/">wisko FAQ</a> by @charles</p>
<p><a href="locked-out/">locked out of wisko</a> by @melo and @charles</p>
<p><a href="smallmelo-migration-1/">smallmelo.com migration: part 1 (ssh + wordpress)</a> by @melo</p>
<p><a href="smallmelo-migration-2/">smallmelo.com migration: part 2 (all the things)</a> by @melo</p>
<p><a href="smallmelo-migration-3/">smallmelo.com migration: part 3 (allthehatsformaps to smallmelo)</a> by @melo</p>
<p><a href="wisko-gitea/">wisko gitea</a> by @charles</p>
<p><a href="geoserver-https/">installing geoserver and connecting over https</a> by @melo and @charles</p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="boot2root/" title="Wisko Boot to Root" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
Wisko Boot to Root
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright 2018 Charles Reid
</div>
powered by
<a href="http://www.mkdocs.org">MkDocs</a>
and
<a href="https://squidfunk.github.io/mkdocs-material/">
Material for MkDocs</a>
</div>
</div>
</div>
</footer>
</div>
<script src="./assets/javascripts/application.0cf9b500.js"></script>
<script>app.initialize({version:"0.17.3",url:{base:"."}})</script>
<script src="./search/require.js"></script>
<script src="./search/search.js"></script>
</body>
</html>

705
locked-out/index.html

@ -0,0 +1,705 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="lang:clipboard.copy" content="Copy to clipboard">
<meta name="lang:clipboard.copied" content="Copied to clipboard">
<meta name="lang:search.language" content="en">
<meta name="lang:search.pipeline.stopwords" content="True">
<meta name="lang:search.pipeline.trimmer" content="True">
<meta name="lang:search.result.none" content="No matching documents">
<meta name="lang:search.result.one" content="1 matching document">
<meta name="lang:search.result.other" content="# matching documents">
<meta name="lang:search.tokenizer" content="[\s\-]+">
<link rel="shortcut icon" href="../">
<meta name="generator" content="mkdocs-0.17.3, mkdocs-material-2.7.2">
<title>Locked Out of Wisko - the wisko manual</title>
<link rel="stylesheet" href="../assets/stylesheets/application.8d40d89b.css">
<link rel="stylesheet" href="../assets/stylesheets/application-palette.6079476c.css">
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
<svg class="md-svg">
<defs>
</defs>
</svg>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="search" autocomplete="off">
<label class="md-overlay" data-md-component="overlay" for="drawer"></label>
<a href="#locked-out-of-wisko" tabindex="1" class="md-skip">
Skip to content
</a>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid">
<div class="md-flex">
<div class="md-flex__cell md-flex__cell--shrink">
<a href=".." title="the wisko manual" class="md-header-nav__button md-logo">
<i class="md-icon">cloud</i>
</a>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--menu md-header-nav__button" for="drawer"></label>
</div>
<div class="md-flex__cell md-flex__cell--stretch">
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
<span class="md-header-nav__topic">
the wisko manual
</span>
<span class="md-header-nav__topic">
Locked Out of Wisko
</span>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--search md-header-nav__button" for="search"></label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
<label class="md-icon md-search__icon" for="search"></label>
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
&#xE5CD;
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="result">
<div class="md-search-result__meta">
Type to start searching
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container">
<main class="md-main">
<div class="md-main__inner md-grid" data-md-component="container">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title md-nav__title--site" for="drawer">
<span class="md-nav__button md-logo">
<i class="md-icon">cloud</i>
</span>
the wisko manual
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." title="Index" class="md-nav__link">
Index
</a>
</li>
<li class="md-nav__item">
<a href="../boot2root/" title="Wisko Boot to Root" class="md-nav__link">
Wisko Boot to Root
</a>
</li>
<li class="md-nav__item">
<a href="../faq/" title="Wisko FAQ" class="md-nav__link">
Wisko FAQ
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="toc">
<label class="md-nav__link md-nav__link--active" for="toc">
Locked Out of Wisko
</label>
<a href="./" title="Locked Out of Wisko" class="md-nav__link md-nav__link--active">
Locked Out of Wisko
</a>
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#creating-a-new-public-key" title="creating a new public key" class="md-nav__link">
creating a new public key
</a>
</li>
<li class="md-nav__item">
<a href="#copy-key-to-do-account" title="copy key to do account" class="md-nav__link">
copy key to do account
</a>
</li>
<li class="md-nav__item">
<a href="#login-add-my-key-to-the-server" title="login/ add my key to the server" class="md-nav__link">
login/ add my key to the server
</a>
</li>
<li class="md-nav__item">
<a href="#ssh-debug-mode-w-charles" title="ssh debug mode w/ charles" class="md-nav__link">
ssh debug mode w/ charles
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-1/" title="smallmelo.com Migration: Part 1" class="md-nav__link">
smallmelo.com Migration: Part 1
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-2/" title="smallmelo.com Migration: Part 2" class="md-nav__link">
smallmelo.com Migration: Part 2
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-3/" title="smallmelo.com Migration: Part 3" class="md-nav__link">
smallmelo.com Migration: Part 3
</a>
</li>
<li class="md-nav__item">
<a href="../wisko-gitea/" title="Wisko Gitea" class="md-nav__link">
Wisko Gitea
</a>
</li>
<li class="md-nav__item">
<a href="../geoserver-https/" title="Connecting to Geoserver Over HTTPS" class="md-nav__link">
Connecting to Geoserver Over HTTPS
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#creating-a-new-public-key" title="creating a new public key" class="md-nav__link">
creating a new public key
</a>
</li>
<li class="md-nav__item">
<a href="#copy-key-to-do-account" title="copy key to do account" class="md-nav__link">
copy key to do account
</a>
</li>
<li class="md-nav__item">
<a href="#login-add-my-key-to-the-server" title="login/ add my key to the server" class="md-nav__link">
login/ add my key to the server
</a>
</li>
<li class="md-nav__item">
<a href="#ssh-debug-mode-w-charles" title="ssh debug mode w/ charles" class="md-nav__link">
ssh debug mode w/ charles
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1 id="locked-out-of-wisko">locked out of wisko</h1>
<p>no problem, i got this.</p>
<pre><code>$ ssh melo@159.65.75.41
ECDSA key fingerprint is ...
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '159.65.75.41' (ECDSA) to the list of known hosts.
melo@159.65.75.41: Permission denied (publickey).
</code></pre>
<p>oh, so i have to generate a new key pair. lemme google that.</p>
<h2 id="creating-a-new-public-key">creating a new public key</h2>
<p><a href="https://www.digitalocean.com/community/tutorials/how-to-use-ssh-keys-with-digitalocean-droplets">help from do</a></p>
<pre><code>ssh-keygen -t rsa
Enter file in which to save the key (/Users/melo/.ssh/id_rsa):
</code></pre>
<p>hit enter to store in user ssh root folder</p>
<pre><code>Enter passphrase (empty for no passphrase):
Enter same passphrase again
</code></pre>
<p>hit enter to store without passphrase</p>
<h2 id="copy-key-to-do-account">copy key to do account</h2>
<p>run from the command line:</p>
<pre><code>cat ~/.ssh/id_rsa.pub
</code></pre>
<p>open settings &gt; security in do, selection to add new key
paste in the above key and name it accordingly</p>
<h2 id="login-add-my-key-to-the-server">login/ add my key to the server</h2>
<p>(<strong>WARNING:</strong> possibly bad to run these commands.)</p>
<pre><code>cat ~/.ssh/id_rsa.pub | ssh melo@159.65.75.41 &quot;cat &gt;&gt; /home/melo/.ssh/authorized_keys&quot;
melo@159.65.75.41: Permission denied (publickey).
</code></pre>
<p>no? </p>
<pre><code>cat ~/.ssh/id\_rsa.pub | ssh root@159.65.75.41 &quot;cat &gt;&gt; ~/.ssh/authorized\_keys&quot;
root@159.65.75.41: Permission denied (publickey).
</code></pre>
<p>oh yea, charles turned off root access via command line.</p>
<h2 id="ssh-debug-mode-w-charles">ssh debug mode w/ charles</h2>
<pre><code>ssh -vvv melo@159.65.75.41
root@159.65.75.41: Permission denied (publickey).
Melo:~ melo$ ssh -vvv melo@159.65.75.41
OpenSSH_7.6p1, LibreSSL 2.6.2
debug1: Reading configuration data /Users/melo/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to 159.65.75.41 port 22.
debug1: Connection established.
debug1: identity file /Users/melo/.ssh/id_rsa type 0
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/melo/.ssh/id_ed25519-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.6
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.4 pat OpenSSH* compat 0x04000000
debug3: fd 5 is O_NONBLOCK
debug1: Authenticating to 159.65.75.41:22 as 'melo'
debug3: hostkeys_foreach: reading file &quot;/Users/melo/.ssh/known_hosts&quot;
debug3: record_hostkey: found key type ECDSA in file /Users/melo/.ssh/known_hosts:20
debug3: load_hostkeys: loaded 1 keys from 159.65.75.41
debug3: order_hostkeyalgs: prefer hostkeyalgs: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent
debug3: receive packet: type 20
debug1: SSH2_MSG_KEXINIT received
debug2: local client KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c
debug2: host key algorithms: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,zlib@openssh.com,zlib
debug2: compression stoc: none,zlib@openssh.com,zlib
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug2: peer server KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
debug2: host key algorithms: ssh-rsa,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519
debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,zlib@openssh.com
debug2: compression stoc: none,zlib@openssh.com
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug1: kex: algorithm: curve25519-sha256@libssh.org
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server-&gt;client cipher: chacha20-poly1305@openssh.com MAC: &lt;implicit&gt; compression: none
debug1: kex: client-&gt;server cipher: chacha20-poly1305@openssh.com MAC: &lt;implicit&gt; compression: none
debug3: send packet: type 30
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug3: receive packet: type 31
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:y1jQr+0TsjhrdM3TGWSZ/BGNdzxrK7u+hUXS/TzS1ss
debug3: hostkeys_foreach: reading file &quot;/Users/melo/.ssh/known_hosts&quot;
debug3: record_hostkey: found key type ECDSA in file /Users/melo/.ssh/known_hosts:20
debug3: load_hostkeys: loaded 1 keys from 159.65.75.41
debug1: Host '159.65.75.41' is known and matches the ECDSA host key.
debug1: Found key in /Users/melo/.ssh/known_hosts:20
debug3: send packet: type 21
debug2: set_newkeys: mode 1
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: receive packet: type 21
debug1: SSH2_MSG_NEWKEYS received
debug2: set_newkeys: mode 0
debug1: rekey after 134217728 blocks
debug2: key: /Users/melo/.ssh/id_rsa (0x7f897241b200)
debug2: key: /Users/melo/.ssh/id_dsa (0x0)
debug2: key: /Users/melo/.ssh/id_ecdsa (0x0)
debug2: key: /Users/melo/.ssh/id_ed25519 (0x0)
debug3: send packet: type 5
debug3: receive packet: type 7
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=&lt;rsa-sha2-256,rsa-sha2-512&gt;
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering public key: RSA SHA256:iIOTgB1gfdbEi11gdn426XlamlH53riKdLqImE22zi8 /Users/melo/.ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug1: Trying private key: /Users/melo/.ssh/id_dsa
debug3: no such identity: /Users/melo/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /Users/melo/.ssh/id_ecdsa
debug3: no such identity: /Users/melo/.ssh/id_ecdsa: No such file or directory
debug1: Trying private key: /Users/melo/.ssh/id_ed25519
debug3: no such identity: /Users/melo/.ssh/id_ed25519: No such file or directory
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
melo@159.65.75.41: Permission denied (publickey).
</code></pre>
<p>Error message is totally unhelpful. Googling turns up some problems with file permissions and with public key access being disabled in SSH config file.</p>
<p>Logged in via DO, opened a console on the machine (Droplets &gt; More &gt; Access console), and found that the ssh folder was owned by root. Nobody can log in via ssh. Charles updated the permissions:</p>
<pre><code>sudo chown -R melo:melo ~/.ssh
sudo chmod 700 ~/.ssh
sudo chmod 600 ~/.ssh/*
</code></pre>
<p>This still didn't work.</p>
<p>Finally, uninstalling/reinstalling openssh did the trick:</p>
<pre><code>sudo apt-get purge openssh-client openssh-server
sudo apt-get install openssh-client openssh-server
</code></pre>
<p>then remove the <code>.ssh</code> folder in the root user's home directory. Regenerate the keys as the root user:</p>
<pre><code>ssh-keygen
</code></pre>
<p>Now the machine should be ready to run the reinstalled SSH server.</p>
<p>To enable passwordless access, assuming you are connecting from a local machine (Mac) to a remote machine (wisko):</p>
<p>On the Mac: generate your ssh key:</p>
<pre><code>ssh-keygen
</code></pre>
<p>print your public key to the screen:</p>
<pre><code>cat ~/.ssh/id_rsa.pub
</code></pre>
<p>Copy this key to the clipboard.</p>
<p>On the Mac, log in to wisko:</p>
<pre><code>ssh melo@&lt;wisko-ip&gt;
</code></pre>
<p>Once you are logged in, edit the following file with your favorite text editor (e.g., nano):</p>
<pre><code>nano ~/.ssh/authorized_keys
</code></pre>
<p>Add the public key from your Mac as the last line of the file. Save it and close it.</p>
<p>Now test out your passwordless access: SSH from the Mac to wisko. The changes should take effect immediately.</p>
<p><a href="http://charlesreid1.com/wiki/SSH#Passwordless_Login">Link to Uncle Chucky's Passwordless SSH Login Guide</a></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="../faq/" title="Wisko FAQ" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
Wisko FAQ
</span>
</div>
</a>
<a href="../smallmelo-migration-1/" title="smallmelo.com Migration: Part 1" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
smallmelo.com Migration: Part 1
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright 2018 Charles Reid
</div>
powered by
<a href="http://www.mkdocs.org">MkDocs</a>
and
<a href="https://squidfunk.github.io/mkdocs-material/">
Material for MkDocs</a>
</div>
</div>
</div>
</footer>
</div>
<script src="../assets/javascripts/application.0cf9b500.js"></script>
<script>app.initialize({version:"0.17.3",url:{base:".."}})</script>
<script src="../search/require.js"></script>
<script src="../search/search.js"></script>
</body>
</html>

1
mkdocs-material

@ -1 +0,0 @@
Subproject commit ff95dcb8463eb5f8f65b14c3d145afae21671ad9

26
mkdocs.yml

@ -1,26 +0,0 @@
site_name: the wisko manual
docs_dir: docs
site_dir: site
theme:
name: null
custom_dir: 'mkdocs-material/material'
palette:
primary: 'green'
accent: 'green'
logo:
icon: 'cloud'
font:
text: 'Roboto'
code: 'Roboto Mono'
extra_css:
- css/custom.css
pages:
- 'Index' : 'index.md'
- 'Wisko Boot to Root': 'boot2root.md'
- 'Wisko FAQ': 'faq.md'
- 'Locked Out of Wisko': 'locked-out.md'
- 'smallmelo.com Migration: Part 1': 'smallmelo-migration-1.md'
- 'smallmelo.com Migration: Part 2': 'smallmelo-migration-2.md'
- 'smallmelo.com Migration: Part 3': 'smallmelo-migration-3.md'
- 'Wisko Gitea': 'wisko-gitea.md'
- 'Connecting to Geoserver Over HTTPS': 'geoserver-https.md'

7
search/lunr.min.js vendored

File diff suppressed because one or more lines are too long

1
search/mustache.min.js vendored

File diff suppressed because one or more lines are too long

36
search/require.js

@ -0,0 +1,36 @@
/*
RequireJS 2.1.16 Copyright (c) 2010-2015, The Dojo Foundation All Rights Reserved.
Available via the MIT or new BSD license.
see: http://github.com/jrburke/requirejs for details
*/
var requirejs,require,define;
(function(ba){function G(b){return"[object Function]"===K.call(b)}function H(b){return"[object Array]"===K.call(b)}function v(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function T(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function t(b,c){return fa.call(b,c)}function m(b,c){return t(b,c)&&b[c]}function B(b,c){for(var d in b)if(t(b,d)&&c(b[d],d))break}function U(b,c,d,e){c&&B(c,function(c,g){if(d||!t(b,g))e&&"object"===typeof c&&c&&!H(c)&&!G(c)&&!(c instanceof
RegExp)?(b[g]||(b[g]={}),U(b[g],c,d,e)):b[g]=c});return b}function u(b,c){return function(){return c.apply(b,arguments)}}function ca(b){throw b;}function da(b){if(!b)return b;var c=ba;v(b.split("."),function(b){c=c[b]});return c}function C(b,c,d,e){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=e;d&&(c.originalError=d);return c}function ga(b){function c(a,k,b){var f,l,c,d,e,g,i,p,k=k&&k.split("/"),h=j.map,n=h&&h["*"];if(a){a=a.split("/");l=a.length-1;j.nodeIdCompat&&
Q.test(a[l])&&(a[l]=a[l].replace(Q,""));"."===a[0].charAt(0)&&k&&(l=k.slice(0,k.length-1),a=l.concat(a));l=a;for(c=0;c<l.length;c++)if(d=l[c],"."===d)l.splice(c,1),c-=1;else if(".."===d&&!(0===c||1==c&&".."===l[2]||".."===l[c-1])&&0<c)l.splice(c-1,2),c-=2;a=a.join("/")}if(b&&h&&(k||n)){l=a.split("/");c=l.length;a:for(;0<c;c-=1){e=l.slice(0,c).join("/");if(k)for(d=k.length;0<d;d-=1)if(b=m(h,k.slice(0,d).join("/")))if(b=m(b,e)){f=b;g=c;break a}!i&&(n&&m(n,e))&&(i=m(n,e),p=c)}!f&&i&&(f=i,g=p);f&&(l.splice(0,
g,f),a=l.join("/"))}return(f=m(j.pkgs,a))?f:a}function d(a){z&&v(document.getElementsByTagName("script"),function(k){if(k.getAttribute("data-requiremodule")===a&&k.getAttribute("data-requirecontext")===i.contextName)return k.parentNode.removeChild(k),!0})}function e(a){var k=m(j.paths,a);if(k&&H(k)&&1<k.length)return k.shift(),i.require.undef(a),i.makeRequire(null,{skipMap:!0})([a]),!0}function n(a){var k,c=a?a.indexOf("!"):-1;-1<c&&(k=a.substring(0,c),a=a.substring(c+1,a.length));return[k,a]}function p(a,
k,b,f){var l,d,e=null,g=k?k.name:null,j=a,p=!0,h="";a||(p=!1,a="_@r"+(K+=1));a=n(a);e=a[0];a=a[1];e&&(e=c(e,g,f),d=m(r,e));a&&(e?h=d&&d.normalize?d.normalize(a,function(a){return c(a,g,f)}):-1===a.indexOf("!")?c(a,g,f):a:(h=c(a,g,f),a=n(h),e=a[0],h=a[1],b=!0,l=i.nameToUrl(h)));b=e&&!d&&!b?"_unnormalized"+(O+=1):"";return{prefix:e,name:h,parentMap:k,unnormalized:!!b,url:l,originalName:j,isDefine:p,id:(e?e+"!"+h:h)+b}}function s(a){var k=a.id,b=m(h,k);b||(b=h[k]=new i.Module(a));return b}function q(a,
k,b){var f=a.id,c=m(h,f);if(t(r,f)&&(!c||c.defineEmitComplete))"defined"===k&&b(r[f]);else if(c=s(a),c.error&&"error"===k)b(c.error);else c.on(k,b)}function w(a,b){var c=a.requireModules,f=!1;if(b)b(a);else if(v(c,function(b){if(b=m(h,b))b.error=a,b.events.error&&(f=!0,b.emit("error",a))}),!f)g.onError(a)}function x(){R.length&&(ha.apply(A,[A.length,0].concat(R)),R=[])}function y(a){delete h[a];delete V[a]}function F(a,b,c){var f=a.map.id;a.error?a.emit("error",a.error):(b[f]=!0,v(a.depMaps,function(f,
d){var e=f.id,g=m(h,e);g&&(!a.depMatched[d]&&!c[e])&&(m(b,e)?(a.defineDep(d,r[e]),a.check()):F(g,b,c))}),c[f]=!0)}function D(){var a,b,c=(a=1E3*j.waitSeconds)&&i.startTime+a<(new Date).getTime(),f=[],l=[],g=!1,h=!0;if(!W){W=!0;B(V,function(a){var i=a.map,j=i.id;if(a.enabled&&(i.isDefine||l.push(a),!a.error))if(!a.inited&&c)e(j)?g=b=!0:(f.push(j),d(j));else if(!a.inited&&(a.fetched&&i.isDefine)&&(g=!0,!i.prefix))return h=!1});if(c&&f.length)return a=C("timeout","Load timeout for modules: "+f,null,
f),a.contextName=i.contextName,w(a);h&&v(l,function(a){F(a,{},{})});if((!c||b)&&g)if((z||ea)&&!X)X=setTimeout(function(){X=0;D()},50);W=!1}}function E(a){t(r,a[0])||s(p(a[0],null,!0)).init(a[1],a[2])}function I(a){var a=a.currentTarget||a.srcElement,b=i.onScriptLoad;a.detachEvent&&!Y?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=i.onScriptError;(!a.detachEvent||Y)&&a.removeEventListener("error",b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function J(){var a;
for(x();A.length;){a=A.shift();if(null===a[0])return w(C("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));E(a)}}var W,Z,i,L,X,j={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},h={},V={},$={},A=[],r={},S={},aa={},K=1,O=1;L={require:function(a){return a.require?a.require:a.require=i.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?r[a.map.id]=a.exports:a.exports=r[a.map.id]={}},module:function(a){return a.module?
a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return m(j.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};Z=function(a){this.events=m($,a.id)||{};this.map=a;this.shim=m(j.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};Z.prototype={init:function(a,b,c,f){f=f||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&(c=u(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=
c;this.inited=!0;this.ignore=f.ignore;f.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=!0;i.startTime=(new Date).getTime();var a=this.map;if(this.shim)i.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],u(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=
this.map.url;S[a]||(S[a]=!0,i.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var f=this.exports,l=this.factory;if(this.inited)if(this.error)this.emit("error",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(G(l)){if(this.events.error&&this.map.isDefine||g.onError!==ca)try{f=i.execCb(c,l,b,f)}catch(d){a=d}else f=i.execCb(c,l,b,f);this.map.isDefine&&void 0===f&&((b=this.module)?f=b.exports:this.usingExports&&
(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=l;this.exports=f;if(this.map.isDefine&&!this.ignore&&(r[c]=f,g.onResourceLoad))g.onResourceLoad(i,this.map,this.depMaps);y(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=
this.map,b=a.id,d=p(a.prefix);this.depMaps.push(d);q(d,"defined",u(this,function(f){var l,d;d=m(aa,this.map.id);var e=this.map.name,P=this.map.parentMap?this.map.parentMap.name:null,n=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(e=f.normalize(e,function(a){return c(a,P,!0)})||""),f=p(a.prefix+"!"+e,this.map.parentMap),q(f,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=m(h,f.id)){this.depMaps.push(f);
if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else d?(this.map.url=i.nameToUrl(d),this.load()):(l=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),l.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(h,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),l.fromText=u(this,function(f,c){var d=a.name,e=p(d),P=M;c&&(f=c);P&&(M=!1);s(e);t(j.config,b)&&(j.config[d]=j.config[b]);try{g.exec(f)}catch(h){return w(C("fromtexteval",
"fromText eval for "+b+" failed: "+h,h,[b]))}P&&(M=!0);this.depMaps.push(e);i.completeLoad(d);n([d],l)}),f.load(a.name,n,l,j))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){V[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,u(this,function(a,b){var c,f;if("string"===typeof a){a=p(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=m(L,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;q(a,"defined",u(this,function(a){this.defineDep(b,
a);this.check()}));this.errback?q(a,"error",u(this,this.errback)):this.events.error&&q(a,"error",u(this,function(a){this.emit("error",a)}))}c=a.id;f=h[c];!t(L,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,u(this,function(a){var b=m(h,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:j,contextName:b,
registry:h,defined:r,urlFetched:S,defQueue:A,Module:Z,makeModuleMap:p,nextTick:g.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=j.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(j[b]||(j[b]={}),U(j[b],a,!0,!0)):j[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(aa[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);
b[c]=a}),j.shim=b);a.packages&&v(a.packages,function(a){var b,a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(j.paths[b]=a.location);j.pkgs[b]=a.name+"/"+(a.main||"main").replace(ia,"").replace(Q,"")});B(h,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=p(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ba,arguments));return b||a.exports&&da(a.exports)}},makeRequire:function(a,e){function j(c,d,m){var n,
q;e.enableBuildCallback&&(d&&G(d))&&(d.__requireJsBuild=!0);if("string"===typeof c){if(G(d))return w(C("requireargs","Invalid require call"),m);if(a&&t(L,c))return L[c](h[a.id]);if(g.get)return g.get(i,c,a,j);n=p(c,a,!1,!0);n=n.id;return!t(r,n)?w(C("notloaded",'Module name "'+n+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[n]}J();i.nextTick(function(){J();q=s(p(null,a));q.skipMap=e.skipMap;q.init(c,d,m,{enabled:!0});D()});return j}e=e||{};U(j,{isBrowser:z,toUrl:function(b){var d,
e=b.lastIndexOf("."),k=b.split("/")[0];if(-1!==e&&(!("."===k||".."===k)||1<e))d=b.substring(e,b.length),b=b.substring(0,e);return i.nameToUrl(c(b,a&&a.id,!0),d,!0)},defined:function(b){return t(r,p(b,a,!1,!0).id)},specified:function(b){b=p(b,a,!1,!0).id;return t(r,b)||t(h,b)}});a||(j.undef=function(b){x();var c=p(b,a,!0),e=m(h,b);d(b);delete r[b];delete S[c.url];delete $[b];T(A,function(a,c){a[0]===b&&A.splice(c,1)});e&&(e.events.defined&&($[b]=e.events),y(b))});return j},enable:function(a){m(h,a.id)&&
s(a).enable()},completeLoad:function(a){var b,c,d=m(j.shim,a)||{},g=d.exports;for(x();A.length;){c=A.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);E(c)}c=m(h,a);if(!b&&!t(r,a)&&c&&!c.inited){if(j.enforceDefine&&(!g||!da(g)))return e(a)?void 0:w(C("nodefine","No define call for "+a,null,[a]));E([a,d.deps||[],d.exportsFn])}D()},nameToUrl:function(a,b,c){var d,e,h;(d=m(j.pkgs,a))&&(a=d);if(d=m(aa,a))return i.nameToUrl(d,b,c);if(g.jsExtRegExp.test(a))d=a+(b||"");else{d=j.paths;
a=a.split("/");for(e=a.length;0<e;e-=1)if(h=a.slice(0,e).join("/"),h=m(d,h)){H(h)&&(h=h[0]);a.splice(0,e,h);break}d=a.join("/");d+=b||(/^data\:|\?/.test(d)||c?"":".js");d=("/"===d.charAt(0)||d.match(/^[\w\+\.\-]+:/)?"":j.baseUrl)+d}return j.urlArgs?d+((-1===d.indexOf("?")?"?":"&")+j.urlArgs):d},load:function(a,b){g.load(i,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||ja.test((a.currentTarget||a.srcElement).readyState))N=null,a=I(a),i.completeLoad(a.id)},
onScriptError:function(a){var b=I(a);if(!e(b.id))return w(C("scripterror","Script error for: "+b.id,a,[b.id]))}};i.require=i.makeRequire();return i}var g,x,y,D,I,E,N,J,s,O,ka=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,la=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,Q=/\.js$/,ia=/^\.\//;x=Object.prototype;var K=x.toString,fa=x.hasOwnProperty,ha=Array.prototype.splice,z=!!("undefined"!==typeof window&&"undefined"!==typeof navigator&&window.document),ea=!z&&"undefined"!==typeof importScripts,ja=
z&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,Y="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),F={},q={},R=[],M=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(G(requirejs))return;q=requirejs;requirejs=void 0}"undefined"!==typeof require&&!G(require)&&(q=require,require=void 0);g=requirejs=function(b,c,d,e){var n,p="_";!H(b)&&"string"!==typeof b&&(n=b,H(c)?(b=c,c=d,d=e):b=[]);n&&n.context&&(p=n.context);(e=m(F,p))||(e=F[p]=g.s.newContext(p));
n&&e.configure(n);return e.require(b,c,d)};g.config=function(b){return g(b)};g.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=g);g.version="2.1.16";g.jsExtRegExp=/^\/|:|\?|\.js$/;g.isBrowser=z;x=g.s={contexts:F,newContext:ga};g({});v(["toUrl","undef","defined","specified"],function(b){g[b]=function(){var c=F._;return c.require[b].apply(c,arguments)}});if(z&&(y=x.head=document.getElementsByTagName("head")[0],D=document.getElementsByTagName("base")[0]))y=
x.head=D.parentNode;g.onError=ca;g.createNode=function(b){var c=b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};g.load=function(b,c,d){var e=b&&b.config||{};if(z)return e=g.createNode(e,c,d),e.setAttribute("data-requirecontext",b.contextName),e.setAttribute("data-requiremodule",c),e.attachEvent&&!(e.attachEvent.toString&&0>e.attachEvent.toString().indexOf("[native code"))&&
!Y?(M=!0,e.attachEvent("onreadystatechange",b.onScriptLoad)):(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)),e.src=d,J=e,D?y.insertBefore(e,D):y.appendChild(e),J=null,e;if(ea)try{importScripts(d),b.completeLoad(c)}catch(m){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,m,[c]))}};z&&!q.skipDataMain&&T(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(I=b.getAttribute("data-main"))return s=I,q.baseUrl||(E=s.split("/"),
s=E.pop(),O=E.length?E.join("/")+"/":"./",q.baseUrl=O),s=s.replace(Q,""),g.jsExtRegExp.test(s)&&(s=I),q.deps=q.deps?q.deps.concat(s):[s],!0});define=function(b,c,d){var e,g;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(ka,"").replace(la,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(M){if(!(e=J))N&&"interactive"===N.readyState||T(document.getElementsByTagName("script"),function(b){if("interactive"===
b.readyState)return N=b}),e=N;e&&(b||(b=e.getAttribute("data-requiremodule")),g=F[e.getAttribute("data-requirecontext")])}(g?g.defQueue:R).push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(q)}})(this);

4
search/search-results-template.mustache

@ -0,0 +1,4 @@
<article>
<h3><a href="{{location}}">{{title}}</a></h3>
<p>{{summary}}</p>
</article>

92
search/search.js

@ -0,0 +1,92 @@
require.config({
baseUrl: base_url + "/search/"
});
require([
'mustache.min',
'lunr.min',
'text!search-results-template.mustache',
'text!search_index.json',
], function (Mustache, lunr, results_template, data) {
"use strict";
function getSearchTerm()
{
var sPageURL = window.location.search.substring(1);
var sURLVariables = sPageURL.split('&');
for (var i = 0; i < sURLVariables.length; i++)
{
var sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] == 'q')
{
return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20'));
}
}
}
var index = lunr(function () {
this.field('title', {boost: 10});
this.field('text');
this.ref('location');
});
data = JSON.parse(data);
var documents = {};
for (var i=0; i < data.docs.length; i++){
var doc = data.docs[i];
doc.location = base_url + doc.location;
index.add(doc);
documents[doc.location] = doc;
}
var search = function(){
var query = document.getElementById('mkdocs-search-query').value;
var search_results = document.getElementById("mkdocs-search-results");
while (search_results.firstChild) {
search_results.removeChild(search_results.firstChild);
}
if(query === ''){
return;
}
var results = index.search(query);
if (results.length > 0){
for (var i=0; i < results.length; i++){
var result = results[i];
doc = documents[result.ref];
doc.base_url = base_url;
doc.summary = doc.text.substring(0, 200);
var html = Mustache.to_html(results_template, doc);
search_results.insertAdjacentHTML('beforeend', html);
}
} else {
search_results.insertAdjacentHTML('beforeend', "<p>No results found</p>");
}
if(jQuery){
/*
* We currently only automatically hide bootstrap models. This
* requires jQuery to work.
*/
jQuery('#mkdocs_search_modal a').click(function(){
jQuery('#mkdocs_search_modal').modal('hide');
});
}
};
var search_input = document.getElementById('mkdocs-search-query');
var term = getSearchTerm();
if (term){
search_input.value = term;
search();
}
if (search_input){search_input.addEventListener("keyup", search);}
});

514
search/search_index.json

File diff suppressed because one or more lines are too long

390
search/text.js

@ -0,0 +1,390 @@
/**
* @license RequireJS text 2.0.12 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.
* Available via the MIT or new BSD license.
* see: http://github.com/requirejs/text for details
*/
/*jslint regexp: true */
/*global require, XMLHttpRequest, ActiveXObject,
define, window, process, Packages,
java, location, Components, FileUtils */
define(['module'], function (module) {
'use strict';
var text, fs, Cc, Ci, xpcIsWindows,
progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'],
xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,
bodyRegExp = /<body[^>]*>\s*([\s\S]+)\s*<\/body>/im,
hasLocation = typeof location !== 'undefined' && location.href,
defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''),
defaultHostName = hasLocation && location.hostname,
defaultPort = hasLocation && (location.port || undefined),
buildMap = {},
masterConfig = (module.config && module.config()) || {};
text = {
version: '2.0.12',
strip: function (content) {
//Strips <?xml ...?> declarations so that external SVG and XML
//documents can be added to a document without worry. Also, if the string
//is an HTML document, only the part inside the body tag is returned.
if (content) {
content = content.replace(xmlRegExp, "");
var matches = content.match(bodyRegExp);
if (matches) {
content = matches[1];
}
} else {
content = "";
}
return content;
},
jsEscape: function (content) {
return content.replace(/(['\\])/g, '\\$1')
.replace(/[\f]/g, "\\f")
.replace(/[\b]/g, "\\b")
.replace(/[\n]/g, "\\n")
.replace(/[\t]/g, "\\t")
.replace(/[\r]/g, "\\r")
.replace(/[\u2028]/g, "\\u2028")
.replace(/[\u2029]/g, "\\u2029");
},
createXhr: masterConfig.createXhr || function () {
//Would love to dump the ActiveX crap in here. Need IE 6 to die first.
var xhr, i, progId;
if (typeof XMLHttpRequest !== "undefined") {
return new XMLHttpRequest();
} else if (typeof ActiveXObject !== "undefined") {
for (i = 0; i < 3; i += 1) {
progId = progIds[i];
try {
xhr = new ActiveXObject(progId);
} catch (e) {}
if (xhr) {
progIds = [progId]; // so faster next time
break;
}
}
}
return xhr;
},
/**
* Parses a resource name into its component parts. Resource names
* look like: module/name.ext!strip, where the !strip part is
* optional.
* @param {String} name the resource name
* @returns {Object} with properties "moduleName", "ext" and "strip"
* where strip is a boolean.
*/
parseName: function (name) {
var modName, ext, temp,
strip = false,
index = name.indexOf("."),
isRelative = name.indexOf('./') === 0 ||
name.indexOf('../') === 0;
if (index !== -1 && (!isRelative || index > 1)) {
modName = name.substring(0, index);
ext = name.substring(index + 1, name.length);
} else {
modName = name;
}
temp = ext || modName;
index = temp.indexOf("!");
if (index !== -1) {
//Pull off the strip arg.
strip = temp.substring(index + 1) === "strip";
temp = temp.substring(0, index);
if (ext) {
ext = temp;
} else {
modName = temp;
}
}
return {
moduleName: modName,
ext: ext,
strip: strip
};
},
xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/,
/**
* Is an URL on another domain. Only works for browser use, returns
* false in non-browser environments. Only used to know if an
* optimized .js version of a text resource should be loaded
* instead.
* @param {String} url
* @returns Boolean
*/
useXhr: function (url, protocol, hostname, port) {
var uProtocol, uHostName, uPort,
match = text.xdRegExp.exec(url);
if (!match) {
return true;
}
uProtocol = match[2];
uHostName = match[3];
uHostName = uHostName.split(':');
uPort = uHostName[1];
uHostName = uHostName[0];
return (!uProtocol || uProtocol === protocol) &&
(!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) &&
((!uPort && !uHostName) || uPort === port);
},
finishLoad: function (name, strip, content, onLoad) {
content = strip ? text.strip(content) : content;
if (masterConfig.isBuild) {
buildMap[name] = content;
}
onLoad(content);
},
load: function (name, req, onLoad, config) {
//Name has format: some.module.filext!strip
//The strip part is optional.
//if strip is present, then that means only get the string contents
//inside a body tag in an HTML string. For XML/SVG content it means
//removing the <?xml ...?> declarations so the content can be inserted
//into the current doc without problems.
// Do not bother with the work if a build and text will
// not be inlined.
if (config && config.isBuild && !config.inlineText) {
onLoad();
return;
}
masterConfig.isBuild = config && config.isBuild;
var parsed = text.parseName(name),
nonStripName = parsed.moduleName +
(parsed.ext ? '.' + parsed.ext : ''),
url = req.toUrl(nonStripName),
useXhr = (masterConfig.useXhr) ||
text.useXhr;
// Do not load if it is an empty: url
if (url.indexOf('empty:') === 0) {
onLoad();
return;
}
//Load the text. Use XHR if possible and in a browser.
if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) {
text.get(url, function (content) {
text.finishLoad(name, parsed.strip, content, onLoad);
}, function (err) {
if (onLoad.error) {
onLoad.error(err);
}
});
} else {
//Need to fetch the resource across domains. Assume
//the resource has been optimized into a JS module. Fetch
//by the module name + extension, but do not include the
//!strip part to avoid file system issues.
req([nonStripName], function (content) {
text.finishLoad(parsed.moduleName + '.' + parsed.ext,
parsed.strip, content, onLoad);
});
}
},
write: function (pluginName, moduleName, write, config) {
if (buildMap.hasOwnProperty(moduleName)) {
var content = text.jsEscape(buildMap[moduleName]);
write.asModule(pluginName + "!" + moduleName,
"define(function () { return '" +
content +
"';});\n");
}
},
writeFile: function (pluginName, moduleName, req, write, config) {
var parsed = text.parseName(moduleName),
extPart = parsed.ext ? '.' + parsed.ext : '',
nonStripName = parsed.moduleName + extPart,
//Use a '.js' file name so that it indicates it is a
//script that can be loaded across domains.
fileName = req.toUrl(parsed.moduleName + extPart) + '.js';
//Leverage own load() method to load plugin value, but only
//write out values that do not have the strip argument,
//to avoid any potential issues with ! in file names.
text.load(nonStripName, req, function (value) {
//Use own write() method to construct full module value.
//But need to create shell that translates writeFile's
//write() to the right interface.
var textWrite = function (contents) {
return write(fileName, contents);
};
textWrite.asModule = function (moduleName, contents) {
return write.asModule(moduleName, fileName, contents);
};
text.write(pluginName, nonStripName, textWrite, config);
}, config);
}
};
if (masterConfig.env === 'node' || (!masterConfig.env &&
typeof process !== "undefined" &&
process.versions &&
!!process.versions.node &&
!process.versions['node-webkit'])) {
//Using special require.nodeRequire, something added by r.js.
fs = require.nodeRequire('fs');
text.get = function (url, callback, errback) {
try {
var file = fs.readFileSync(url, 'utf8');
//Remove BOM (Byte Mark Order) from utf8 files if it is there.
if (file.indexOf('\uFEFF') === 0) {
file = file.substring(1);
}
callback(file);
} catch (e) {
if (errback) {
errback(e);
}
}
};
} else if (masterConfig.env === 'xhr' || (!masterConfig.env &&
text.createXhr())) {
text.get = function (url, callback, errback, headers) {
var xhr = text.createXhr(), header;
xhr.open('GET', url, true);
//Allow plugins direct access to xhr headers
if (headers) {
for (header in headers) {
if (headers.hasOwnProperty(header)) {
xhr.setRequestHeader(header.toLowerCase(), headers[header]);
}
}
}
//Allow overrides specified in config
if (masterConfig.onXhr) {
masterConfig.onXhr(xhr, url);
}
xhr.onreadystatechange = function (evt) {
var status, err;
//Do not explicitly handle errors, those should be
//visible via console output in the browser.
if (xhr.readyState === 4) {
status = xhr.status || 0;
if (status > 399 && status < 600) {
//An http 4xx or 5xx error. Signal an error.
err = new Error(url + ' HTTP status: ' + status);
err.xhr = xhr;
if (errback) {
errback(err);
}
} else {
callback(xhr.responseText);
}
if (masterConfig.onXhrComplete) {
masterConfig.onXhrComplete(xhr, url);
}
}
};
xhr.send(null);
};
} else if (masterConfig.env === 'rhino' || (!masterConfig.env &&
typeof Packages !== 'undefined' && typeof java !== 'undefined')) {
//Why Java, why is this so awkward?
text.get = function (url, callback) {
var stringBuffer, line,
encoding = "utf-8",
file = new java.io.File(url),
lineSeparator = java.lang.System.getProperty("line.separator"),
input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)),
content = '';
try {
stringBuffer = new java.lang.StringBuffer();
line = input.readLine();
// Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324
// http://www.unicode.org/faq/utf_bom.html
// Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK:
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058
if (line && line.length() && line.charAt(0) === 0xfeff) {
// Eat the BOM, since we've already found the encoding on this file,
// and we plan to concatenating this buffer with others; the BOM should
// only appear at the top of a file.
line = line.substring(1);
}
if (line !== null) {
stringBuffer.append(line);
}
while ((line = input.readLine()) !== null) {
stringBuffer.append(lineSeparator);
stringBuffer.append(line);
}
//Make sure we return a JavaScript string and not a Java string.
content = String(stringBuffer.toString()); //String
} finally {
input.close();
}
callback(content);
};
} else if (masterConfig.env === 'xpconnect' || (!masterConfig.env &&
typeof Components !== 'undefined' && Components.classes &&
Components.interfaces)) {
//Avert your gaze!
Cc = Components.classes;
Ci = Components.interfaces;
Components.utils['import']('resource://gre/modules/FileUtils.jsm');
xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc);
text.get = function (url, callback) {
var inStream, convertStream, fileObj,
readData = {};
if (xpcIsWindows) {
url = url.replace(/\//g, '\\');
}
fileObj = new FileUtils.File(url);
//XPCOM, you so crazy
try {
inStream = Cc['@mozilla.org/network/file-input-stream;1']
.createInstance(Ci.nsIFileInputStream);
inStream.init(fileObj, 1, 0, false);
convertStream = Cc['@mozilla.org/intl/converter-input-stream;1']
.createInstance(Ci.nsIConverterInputStream);
convertStream.init(inStream, "utf-8", inStream.available(),
Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
convertStream.readString(inStream.available(), readData);
convertStream.close();
inStream.close();
callback(readData.value);
} catch (e) {
throw new Error((fileObj && fileObj.path || '') + ': ' + e);
}
};
}
return text;
});

76
sitemap.xml

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>/</loc>
<lastmod>2018-04-23</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/boot2root/</loc>
<lastmod>2018-04-23</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/faq/</loc>
<lastmod>2018-04-23</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/locked-out/</loc>
<lastmod>2018-04-23</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/smallmelo-migration-1/</loc>
<lastmod>2018-04-23</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/smallmelo-migration-2/</loc>
<lastmod>2018-04-23</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/smallmelo-migration-3/</loc>
<lastmod>2018-04-23</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/wisko-gitea/</loc>
<lastmod>2018-04-23</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/geoserver-https/</loc>
<lastmod>2018-04-23</lastmod>
<changefreq>daily</changefreq>
</url>
</urlset>

579
smallmelo-migration-1/index.html

@ -0,0 +1,579 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="lang:clipboard.copy" content="Copy to clipboard">
<meta name="lang:clipboard.copied" content="Copied to clipboard">
<meta name="lang:search.language" content="en">
<meta name="lang:search.pipeline.stopwords" content="True">
<meta name="lang:search.pipeline.trimmer" content="True">
<meta name="lang:search.result.none" content="No matching documents">
<meta name="lang:search.result.one" content="1 matching document">
<meta name="lang:search.result.other" content="# matching documents">
<meta name="lang:search.tokenizer" content="[\s\-]+">
<link rel="shortcut icon" href="../">
<meta name="generator" content="mkdocs-0.17.3, mkdocs-material-2.7.2">
<title>smallmelo.com Migration: Part 1 - the wisko manual</title>
<link rel="stylesheet" href="../assets/stylesheets/application.8d40d89b.css">
<link rel="stylesheet" href="../assets/stylesheets/application-palette.6079476c.css">
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
<svg class="md-svg">
<defs>
</defs>
</svg>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="search" autocomplete="off">
<label class="md-overlay" data-md-component="overlay" for="drawer"></label>
<a href="#smallmelocom-migration-part-1" tabindex="1" class="md-skip">
Skip to content
</a>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid">
<div class="md-flex">
<div class="md-flex__cell md-flex__cell--shrink">
<a href=".." title="the wisko manual" class="md-header-nav__button md-logo">
<i class="md-icon">cloud</i>
</a>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--menu md-header-nav__button" for="drawer"></label>
</div>
<div class="md-flex__cell md-flex__cell--stretch">
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
<span class="md-header-nav__topic">
the wisko manual
</span>
<span class="md-header-nav__topic">
smallmelo.com Migration: Part 1
</span>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--search md-header-nav__button" for="search"></label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
<label class="md-icon md-search__icon" for="search"></label>
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
&#xE5CD;
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="result">
<div class="md-search-result__meta">
Type to start searching
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container">
<main class="md-main">
<div class="md-main__inner md-grid" data-md-component="container">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title md-nav__title--site" for="drawer">
<span class="md-nav__button md-logo">
<i class="md-icon">cloud</i>
</span>
the wisko manual
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." title="Index" class="md-nav__link">
Index
</a>
</li>
<li class="md-nav__item">
<a href="../boot2root/" title="Wisko Boot to Root" class="md-nav__link">
Wisko Boot to Root
</a>
</li>
<li class="md-nav__item">
<a href="../faq/" title="Wisko FAQ" class="md-nav__link">
Wisko FAQ
</a>
</li>
<li class="md-nav__item">
<a href="../locked-out/" title="Locked Out of Wisko" class="md-nav__link">
Locked Out of Wisko
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="toc">
<label class="md-nav__link md-nav__link--active" for="toc">
smallmelo.com Migration: Part 1
</label>
<a href="./" title="smallmelo.com Migration: Part 1" class="md-nav__link md-nav__link--active">
smallmelo.com Migration: Part 1
</a>
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#copy-public-ssh-key-to-wisko" title="copy public ssh key to wisko" class="md-nav__link">
copy public ssh key to wisko
</a>
</li>
<li class="md-nav__item">
<a href="#changing-the-folder-structure-of-my-wordpress-site" title="changing the folder structure of my wordpress site" class="md-nav__link">
changing the folder structure of my wordpress site
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-2/" title="smallmelo.com Migration: Part 2" class="md-nav__link">
smallmelo.com Migration: Part 2
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-3/" title="smallmelo.com Migration: Part 3" class="md-nav__link">
smallmelo.com Migration: Part 3
</a>
</li>
<li class="md-nav__item">
<a href="../wisko-gitea/" title="Wisko Gitea" class="md-nav__link">
Wisko Gitea
</a>
</li>
<li class="md-nav__item">
<a href="../geoserver-https/" title="Connecting to Geoserver Over HTTPS" class="md-nav__link">
Connecting to Geoserver Over HTTPS
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#copy-public-ssh-key-to-wisko" title="copy public ssh key to wisko" class="md-nav__link">
copy public ssh key to wisko
</a>
</li>
<li class="md-nav__item">
<a href="#changing-the-folder-structure-of-my-wordpress-site" title="changing the folder structure of my wordpress site" class="md-nav__link">
changing the folder structure of my wordpress site
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1 id="smallmelocom-migration-part-1">smallmelo.com migration part 1</h1>
<h2 id="copy-public-ssh-key-to-wisko">copy public ssh key to wisko</h2>
<p>get public ssh key from local machine</p>
<pre><code>cat ~/.ssh/id_rsa.pub
</code></pre>
<p>copy that log into wisko in seperate termibal window</p>
<pre><code>nano .ssh/authorized_keys
</code></pre>
<p>paste in then exit</p>
<h2 id="changing-the-folder-structure-of-my-wordpress-site">changing the folder structure of my wordpress site</h2>
<p>used <a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-14-04-lts">this site</a> to setup the folders the way i wanted them. </p>
<p>lots of nano-ing and reviewing later, ready to start making changes.</p>
<pre><code>cd /var/www
</code></pre>
<p>make directory</p>
<pre><code>sudo mkdir -p /var/www/allthehatsformaps.com/public_html
</code></pre>
<p>grant myself permission to access</p>
<pre><code>sudo chown -R $USER:$USER /var/www/allthehatsformaps.com/public_html
</code></pre>
<p>create example page</p>
<pre><code>nano /var/www/allthehatsformaps.com/public_html/index.html
</code></pre>
<p>ugh, do some renaming</p>
<pre><code>sudo mv allthehatsformaps.com allthehatsformaps
sudo chown -R $USER:$USER /var/www/allthehatsformaps/public_html
</code></pre>
<p>add my html content accordingly, then make a copy of the conf file</p>
<pre><code>sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/allthehatsformaps.conf
nano allthehatsformaps.conf
</code></pre>
<p>grant permissions</p>
<pre><code>sudo chown -R $USER:$USER /etc/apache2/sites-available/allthehatsformaps.conf
</code></pre>
<p>edited my new config file</p>
<pre><code>ServerName allthehatsformaps.com
ServerAlias www.allthehatsformaps.com
ServerAdmin melo@allthehatsformaps.com
DocumentRoot /var/www/allthehatsformaps/public_html
</code></pre>
<p>disable charles' site &amp; enable my new one</p>
<pre><code>sudo a2dissite 000-default.conf
sudo a2ensite allthehatsformaps.conf
service apache2 reload
</code></pre>
<p>copy wordpress folder from htdocs to my new folder </p>
<pre><code>sudo mv /var/www/htdocs/wordpress /var/www/allthehatsformaps/public_html
</code></pre>
<p>oops... that moved the entire folder, i just wanted to move its contents. </p>
<pre><code>cd /var/www/allthehatsformaps/public_html
sudo mv wordpress/* .
rmdir wordpress
rm index.html
</code></pre>
<p>going to allthehatsformaps.com works</p>
<p>going to allthehatsformaps.com/wp-admin tries to redirect to http://159.65.75.41/wordpress/wp-login.php?redirect_to=http%3A%2F%2Fallthehatsformaps.com%2Fwp-admin%2F&amp;reauth=1 and throws a 404 error</p>
<p>went instead to:
http://159.65.75.41/wp-login.php</p>
<p>copy back the wordpress folder into htdocs</p>
<pre><code>sudo cp /var/www/allthehatsformaps/public_html/* /var/www/htdocs/wordpress
</code></pre>
<p>disable my site config and enable old one</p>
<pre><code>sudo a2dissite allthehatsformaps.conf
sudo a2ensite 000-default.conf
service apache2 reload
</code></pre>
<p>went to the wordpress login and signed in
under settings removed "wordpress" subfolder from the site url</p>
<p>disable charles' site &amp; enable my new one</p>
<pre><code>sudo a2dissite 000-default.conf
sudo a2ensite allthehatsformaps.conf
service apache2 reload
</code></pre>
<p>logged back into wordpress and changed the url to: http://allthehatsformaps.com</p>
<p>removed the old wordpress folder in htdocs:</p>
<pre><code>sudo rm -r wordpress
</code></pre>
<p>cd back into the new wordpress and added a .htaccess file with the following:</p>
<pre><code>&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
&lt;/IfModule&gt;
</code></pre>
<p>then gave wordpress permission to edit it, according <a href="https://stackoverflow.com/questions/23388144/wordpress-apache-permalinks-not-working-404-error">to this site</a></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="../locked-out/" title="Locked Out of Wisko" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
Locked Out of Wisko
</span>
</div>
</a>
<a href="../smallmelo-migration-2/" title="smallmelo.com Migration: Part 2" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
smallmelo.com Migration: Part 2
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright 2018 Charles Reid
</div>
powered by
<a href="http://www.mkdocs.org">MkDocs</a>
and
<a href="https://squidfunk.github.io/mkdocs-material/">
Material for MkDocs</a>
</div>
</div>
</div>
</footer>
</div>
<script src="../assets/javascripts/application.0cf9b500.js"></script>
<script>app.initialize({version:"0.17.3",url:{base:".."}})</script>
<script src="../search/require.js"></script>
<script src="../search/search.js"></script>
</body>
</html>

597
smallmelo-migration-2/index.html

@ -0,0 +1,597 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="lang:clipboard.copy" content="Copy to clipboard">
<meta name="lang:clipboard.copied" content="Copied to clipboard">
<meta name="lang:search.language" content="en">
<meta name="lang:search.pipeline.stopwords" content="True">
<meta name="lang:search.pipeline.trimmer" content="True">
<meta name="lang:search.result.none" content="No matching documents">
<meta name="lang:search.result.one" content="1 matching document">
<meta name="lang:search.result.other" content="# matching documents">
<meta name="lang:search.tokenizer" content="[\s\-]+">
<link rel="shortcut icon" href="../">
<meta name="generator" content="mkdocs-0.17.3, mkdocs-material-2.7.2">
<title>smallmelo.com Migration: Part 2 - the wisko manual</title>
<link rel="stylesheet" href="../assets/stylesheets/application.8d40d89b.css">
<link rel="stylesheet" href="../assets/stylesheets/application-palette.6079476c.css">
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
<svg class="md-svg">
<defs>
</defs>
</svg>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="search" autocomplete="off">
<label class="md-overlay" data-md-component="overlay" for="drawer"></label>
<a href="#smallmelocom-migration-part-2-all-the-things" tabindex="1" class="md-skip">
Skip to content
</a>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid">
<div class="md-flex">
<div class="md-flex__cell md-flex__cell--shrink">
<a href=".." title="the wisko manual" class="md-header-nav__button md-logo">
<i class="md-icon">cloud</i>
</a>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--menu md-header-nav__button" for="drawer"></label>
</div>
<div class="md-flex__cell md-flex__cell--stretch">
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
<span class="md-header-nav__topic">
the wisko manual
</span>
<span class="md-header-nav__topic">
smallmelo.com Migration: Part 2
</span>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--search md-header-nav__button" for="search"></label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
<label class="md-icon md-search__icon" for="search"></label>
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
&#xE5CD;
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="result">
<div class="md-search-result__meta">
Type to start searching
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container">
<main class="md-main">
<div class="md-main__inner md-grid" data-md-component="container">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title md-nav__title--site" for="drawer">
<span class="md-nav__button md-logo">
<i class="md-icon">cloud</i>
</span>
the wisko manual
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." title="Index" class="md-nav__link">
Index
</a>
</li>
<li class="md-nav__item">
<a href="../boot2root/" title="Wisko Boot to Root" class="md-nav__link">
Wisko Boot to Root
</a>
</li>
<li class="md-nav__item">
<a href="../faq/" title="Wisko FAQ" class="md-nav__link">
Wisko FAQ
</a>
</li>
<li class="md-nav__item">
<a href="../locked-out/" title="Locked Out of Wisko" class="md-nav__link">
Locked Out of Wisko
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-1/" title="smallmelo.com Migration: Part 1" class="md-nav__link">
smallmelo.com Migration: Part 1
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="toc">
<label class="md-nav__link md-nav__link--active" for="toc">
smallmelo.com Migration: Part 2
</label>
<a href="./" title="smallmelo.com Migration: Part 2" class="md-nav__link md-nav__link--active">
smallmelo.com Migration: Part 2
</a>
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#grant-melo-permission-to-create-files-and-upload-via-sftp-using-filezilla" title="grant melo permission to create files and upload via sftp using filezilla" class="md-nav__link">
grant melo permission to create files and upload via sftp using filezilla
</a>
</li>
<li class="md-nav__item">
<a href="#copied-htmlphp-files-into-varwwwsmallmelo" title="copied html/php files into var/www/smallmelo" class="md-nav__link">
copied html/php files into var/www/smallmelo
</a>
</li>
<li class="md-nav__item">
<a href="#add-the-dns-records-to-dreamhost-to-point-to-the-server" title="add the dns records to dreamhost to point to the server" class="md-nav__link">
add the dns records to dreamhost to point to the server
</a>
</li>
<li class="md-nav__item">
<a href="#create-new-conf-file-for-smallmelo" title="create new conf file for smallmelo" class="md-nav__link">
create new conf file for smallmelo
</a>
</li>
<li class="md-nav__item">
<a href="#edit-the-conf-file-to-point-to-smallmelocom" title="edit the conf file to point to smallmelo.com" class="md-nav__link">
edit the conf file to point to smallmelo.com
</a>
</li>
<li class="md-nav__item">
<a href="#enable-the-site" title="enable the site" class="md-nav__link">
enable the site
</a>
</li>
<li class="md-nav__item">
<a href="#make-a-backup-copy-all-files-from-smallmelocom" title="make a backup copy all files from smallmelo.com" class="md-nav__link">
make a backup copy all files from smallmelo.com
</a>
</li>
<li class="md-nav__item">
<a href="#made-a-basic-indexhtml-file" title="made a basic index.html file" class="md-nav__link">
made a basic index.html file
</a>
</li>
<li class="md-nav__item">
<a href="#turn-off-hosting-by-dreamhost" title="turn off hosting by dreamhost" class="md-nav__link">
turn off hosting by dreamhost
</a>
</li>
<li class="md-nav__item">
<a href="#restart-apache2" title="restart apache2" class="md-nav__link">
restart apache2
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-3/" title="smallmelo.com Migration: Part 3" class="md-nav__link">
smallmelo.com Migration: Part 3
</a>
</li>
<li class="md-nav__item">
<a href="../wisko-gitea/" title="Wisko Gitea" class="md-nav__link">
Wisko Gitea
</a>
</li>
<li class="md-nav__item">
<a href="../geoserver-https/" title="Connecting to Geoserver Over HTTPS" class="md-nav__link">
Connecting to Geoserver Over HTTPS
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#grant-melo-permission-to-create-files-and-upload-via-sftp-using-filezilla" title="grant melo permission to create files and upload via sftp using filezilla" class="md-nav__link">
grant melo permission to create files and upload via sftp using filezilla
</a>
</li>
<li class="md-nav__item">
<a href="#copied-htmlphp-files-into-varwwwsmallmelo" title="copied html/php files into var/www/smallmelo" class="md-nav__link">
copied html/php files into var/www/smallmelo
</a>
</li>
<li class="md-nav__item">
<a href="#add-the-dns-records-to-dreamhost-to-point-to-the-server" title="add the dns records to dreamhost to point to the server" class="md-nav__link">
add the dns records to dreamhost to point to the server
</a>
</li>
<li class="md-nav__item">
<a href="#create-new-conf-file-for-smallmelo" title="create new conf file for smallmelo" class="md-nav__link">
create new conf file for smallmelo
</a>
</li>
<li class="md-nav__item">
<a href="#edit-the-conf-file-to-point-to-smallmelocom" title="edit the conf file to point to smallmelo.com" class="md-nav__link">
edit the conf file to point to smallmelo.com
</a>
</li>
<li class="md-nav__item">
<a href="#enable-the-site" title="enable the site" class="md-nav__link">
enable the site
</a>
</li>
<li class="md-nav__item">
<a href="#make-a-backup-copy-all-files-from-smallmelocom" title="make a backup copy all files from smallmelo.com" class="md-nav__link">
make a backup copy all files from smallmelo.com
</a>
</li>
<li class="md-nav__item">
<a href="#made-a-basic-indexhtml-file" title="made a basic index.html file" class="md-nav__link">
made a basic index.html file
</a>
</li>
<li class="md-nav__item">
<a href="#turn-off-hosting-by-dreamhost" title="turn off hosting by dreamhost" class="md-nav__link">
turn off hosting by dreamhost
</a>
</li>
<li class="md-nav__item">
<a href="#restart-apache2" title="restart apache2" class="md-nav__link">
restart apache2
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1 id="smallmelocom-migration-part-2-all-the-things">smallmelo.com migration part 2 (all the things)</h1>
<h2 id="grant-melo-permission-to-create-files-and-upload-via-sftp-using-filezilla">grant melo permission to create files and upload via sftp using filezilla</h2>
<p>used <a href="https://www.digitalocean.com/community/questions/i-can-t-seem-to-grant-myself-write-permissions-to-the-www-directory">these</a> instructions</p>
<h2 id="copied-htmlphp-files-into-varwwwsmallmelo">copied html/php files into var/www/smallmelo</h2>
<p>using filazilla</p>
<h2 id="add-the-dns-records-to-dreamhost-to-point-to-the-server">add the dns records to dreamhost to point to the server</h2>
<p>159.65.75.41 (a)
www smallmelo.com (cname)</p>
<h2 id="create-new-conf-file-for-smallmelo">create new conf file for smallmelo</h2>
<pre><code>sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/smallmelo.conf
</code></pre>
<h2 id="edit-the-conf-file-to-point-to-smallmelocom">edit the conf file to point to smallmelo.com</h2>
<h2 id="enable-the-site">enable the site</h2>
<pre><code>sudo a2ensite smallmelo.conf
service apache2 reload
</code></pre>
<h2 id="make-a-backup-copy-all-files-from-smallmelocom">make a backup copy all files from smallmelo.com</h2>
<h2 id="made-a-basic-indexhtml-file">made a basic index.html file</h2>
<h2 id="turn-off-hosting-by-dreamhost">turn off hosting by dreamhost</h2>
<h2 id="restart-apache2">restart apache2</h2>
<pre><code>sudo service apache2 restart
</code></pre>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="../smallmelo-migration-1/" title="smallmelo.com Migration: Part 1" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
smallmelo.com Migration: Part 1
</span>
</div>
</a>
<a href="../smallmelo-migration-3/" title="smallmelo.com Migration: Part 3" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
smallmelo.com Migration: Part 3
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright 2018 Charles Reid
</div>
powered by
<a href="http://www.mkdocs.org">MkDocs</a>
and
<a href="https://squidfunk.github.io/mkdocs-material/">
Material for MkDocs</a>
</div>
</div>
</div>
</footer>
</div>
<script src="../assets/javascripts/application.0cf9b500.js"></script>
<script>app.initialize({version:"0.17.3",url:{base:".."}})</script>
<script src="../search/require.js"></script>
<script src="../search/search.js"></script>
</body>
</html>

654
smallmelo-migration-3/index.html

@ -0,0 +1,654 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="lang:clipboard.copy" content="Copy to clipboard">
<meta name="lang:clipboard.copied" content="Copied to clipboard">
<meta name="lang:search.language" content="en">
<meta name="lang:search.pipeline.stopwords" content="True">
<meta name="lang:search.pipeline.trimmer" content="True">
<meta name="lang:search.result.none" content="No matching documents">
<meta name="lang:search.result.one" content="1 matching document">
<meta name="lang:search.result.other" content="# matching documents">
<meta name="lang:search.tokenizer" content="[\s\-]+">
<link rel="shortcut icon" href="../">
<meta name="generator" content="mkdocs-0.17.3, mkdocs-material-2.7.2">
<title>smallmelo.com Migration: Part 3 - the wisko manual</title>
<link rel="stylesheet" href="../assets/stylesheets/application.8d40d89b.css">
<link rel="stylesheet" href="../assets/stylesheets/application-palette.6079476c.css">
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
<svg class="md-svg">
<defs>
</defs>
</svg>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="search" autocomplete="off">
<label class="md-overlay" data-md-component="overlay" for="drawer"></label>
<a href="#smallmelocom-migration-part-3-allthehatsformaps-to-smallmelo" tabindex="1" class="md-skip">
Skip to content
</a>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid">
<div class="md-flex">
<div class="md-flex__cell md-flex__cell--shrink">
<a href=".." title="the wisko manual" class="md-header-nav__button md-logo">
<i class="md-icon">cloud</i>
</a>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--menu md-header-nav__button" for="drawer"></label>
</div>
<div class="md-flex__cell md-flex__cell--stretch">
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
<span class="md-header-nav__topic">
the wisko manual
</span>
<span class="md-header-nav__topic">
smallmelo.com Migration: Part 3
</span>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--search md-header-nav__button" for="search"></label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
<label class="md-icon md-search__icon" for="search"></label>
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
&#xE5CD;
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="result">
<div class="md-search-result__meta">
Type to start searching
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container">
<main class="md-main">
<div class="md-main__inner md-grid" data-md-component="container">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title md-nav__title--site" for="drawer">
<span class="md-nav__button md-logo">
<i class="md-icon">cloud</i>
</span>
the wisko manual
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." title="Index" class="md-nav__link">
Index
</a>
</li>
<li class="md-nav__item">
<a href="../boot2root/" title="Wisko Boot to Root" class="md-nav__link">
Wisko Boot to Root
</a>
</li>
<li class="md-nav__item">
<a href="../faq/" title="Wisko FAQ" class="md-nav__link">
Wisko FAQ
</a>
</li>
<li class="md-nav__item">
<a href="../locked-out/" title="Locked Out of Wisko" class="md-nav__link">
Locked Out of Wisko
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-1/" title="smallmelo.com Migration: Part 1" class="md-nav__link">
smallmelo.com Migration: Part 1
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-2/" title="smallmelo.com Migration: Part 2" class="md-nav__link">
smallmelo.com Migration: Part 2
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="toc">
<label class="md-nav__link md-nav__link--active" for="toc">
smallmelo.com Migration: Part 3
</label>
<a href="./" title="smallmelo.com Migration: Part 3" class="md-nav__link md-nav__link--active">
smallmelo.com Migration: Part 3
</a>
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#remove-placeholder-file" title="remove placeholder file" class="md-nav__link">
remove placeholder file
</a>
</li>
<li class="md-nav__item">
<a href="#copy-the-files-to-smallmelo" title="copy the files to smallmelo" class="md-nav__link">
copy the files to smallmelo
</a>
</li>
<li class="md-nav__item">
<a href="#update-the-site-in-wordpress" title="update the site in wordpress" class="md-nav__link">
update the site in wordpress
</a>
</li>
<li class="md-nav__item">
<a href="#copy-the-relevent-stuff-over-to-the-smallmeloconf" title="copy the relevent stuff over to the smallmelo.conf" class="md-nav__link">
copy the relevent stuff over to the smallmelo.conf
</a>
</li>
<li class="md-nav__item">
<a href="#disable-and-enable-sites" title="disable and enable sites" class="md-nav__link">
disable and enable sites
</a>
</li>
<li class="md-nav__item">
<a href="#give-permissions" title="give permissions" class="md-nav__link">
give permissions
</a>
</li>
<li class="md-nav__item">
<a href="#reboot" title="reboot" class="md-nav__link">
reboot
</a>
</li>
<li class="md-nav__item">
<a href="#disabled-reenabled-reload" title="disabled, reenabled, reload" class="md-nav__link">
disabled, reenabled, reload
</a>
</li>
<li class="md-nav__item">
<a href="#disabling-allthehats" title="disabling allthehats" class="md-nav__link">
disabling allthehats
</a>
</li>
<li class="md-nav__item">
<a href="#in-the-varwwww" title="in the /var/wwww" class="md-nav__link">
in the /var/wwww
</a>
</li>
<li class="md-nav__item">
<a href="#in-dreamhost" title="in dreamhost" class="md-nav__link">
in dreamhost
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../wisko-gitea/" title="Wisko Gitea" class="md-nav__link">
Wisko Gitea
</a>
</li>
<li class="md-nav__item">
<a href="../geoserver-https/" title="Connecting to Geoserver Over HTTPS" class="md-nav__link">
Connecting to Geoserver Over HTTPS
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#remove-placeholder-file" title="remove placeholder file" class="md-nav__link">
remove placeholder file
</a>
</li>
<li class="md-nav__item">
<a href="#copy-the-files-to-smallmelo" title="copy the files to smallmelo" class="md-nav__link">
copy the files to smallmelo
</a>
</li>
<li class="md-nav__item">
<a href="#update-the-site-in-wordpress" title="update the site in wordpress" class="md-nav__link">
update the site in wordpress
</a>
</li>
<li class="md-nav__item">
<a href="#copy-the-relevent-stuff-over-to-the-smallmeloconf" title="copy the relevent stuff over to the smallmelo.conf" class="md-nav__link">
copy the relevent stuff over to the smallmelo.conf
</a>
</li>
<li class="md-nav__item">
<a href="#disable-and-enable-sites" title="disable and enable sites" class="md-nav__link">
disable and enable sites
</a>
</li>
<li class="md-nav__item">
<a href="#give-permissions" title="give permissions" class="md-nav__link">
give permissions
</a>
</li>
<li class="md-nav__item">
<a href="#reboot" title="reboot" class="md-nav__link">
reboot
</a>
</li>
<li class="md-nav__item">
<a href="#disabled-reenabled-reload" title="disabled, reenabled, reload" class="md-nav__link">
disabled, reenabled, reload
</a>
</li>
<li class="md-nav__item">
<a href="#disabling-allthehats" title="disabling allthehats" class="md-nav__link">
disabling allthehats
</a>
</li>
<li class="md-nav__item">
<a href="#in-the-varwwww" title="in the /var/wwww" class="md-nav__link">
in the /var/wwww
</a>
</li>
<li class="md-nav__item">
<a href="#in-dreamhost" title="in dreamhost" class="md-nav__link">
in dreamhost
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1 id="smallmelocom-migration-part-3-allthehatsformaps-to-smallmelo">smallmelo.com migration part 3 (allthehatsformaps to smallmelo)</h1>
<h2 id="remove-placeholder-file">remove placeholder file</h2>
<pre><code>sudo rm index.html
</code></pre>
<h2 id="copy-the-files-to-smallmelo">copy the files to smallmelo</h2>
<pre><code>sudo cp -a /var/www/allthehatsformaps/public_html/* /var/www/smallmelo/public_html
</code></pre>
<h2 id="update-the-site-in-wordpress">update the site in wordpress</h2>
<p>logged back into wordpress and changed the url to: <a href="http://smallmelo.com/">http://smallmelo.com</a></p>
<h2 id="copy-the-relevent-stuff-over-to-the-smallmeloconf">copy the relevent stuff over to the smallmelo.conf</h2>
<pre><code>&lt;Directory /var/www/smallmelo/public_html/&gt;
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
&lt;/Directory&gt;
</code></pre>
<h2 id="disable-and-enable-sites">disable and enable sites</h2>
<pre><code>sudo a2dissite allthehatsformaps.conf
sudo a2ensite smallmelo.conf
sudo /etc/init.d/apache2 restart
</code></pre>
<h2 id="give-permissions">give permissions</h2>
<pre><code>sudo chown -v :www-data /var/www/smallmelo/public_html/.htaccess
sudo chmod -v 664 &quot;/var/www/smallmelo/public_html/.htaccess&quot;
</code></pre>
<h2 id="reboot">reboot</h2>
<pre><code>sudo /etc/init.d/apache2 restart
</code></pre>
<h2 id="disabled-reenabled-reload">disabled, reenabled, reload</h2>
<pre><code>sudo a2dissite smallmelo.conf
sudo a2ensite smallmelo.conf
sudo /etc/init.d/apache2 restart
service apache2 reload
</code></pre>
<h2 id="disabling-allthehats">disabling allthehats</h2>
<pre><code>sudo rm allthehatsformaps.conf
service apache2 reload
</code></pre>
<h2 id="in-the-varwwww">in the /var/wwww</h2>
<pre><code>sudo rm -r allthehatsformaps
</code></pre>
<h2 id="in-dreamhost">in dreamhost</h2>
<p>remove wisko DNS records
setup redirect</p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="../smallmelo-migration-2/" title="smallmelo.com Migration: Part 2" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
smallmelo.com Migration: Part 2
</span>
</div>
</a>
<a href="../wisko-gitea/" title="Wisko Gitea" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
Wisko Gitea
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright 2018 Charles Reid
</div>
powered by
<a href="http://www.mkdocs.org">MkDocs</a>
and
<a href="https://squidfunk.github.io/mkdocs-material/">
Material for MkDocs</a>
</div>
</div>
</div>
</footer>
</div>
<script src="../assets/javascripts/application.0cf9b500.js"></script>
<script>app.initialize({version:"0.17.3",url:{base:".."}})</script>
<script src="../search/require.js"></script>
<script src="../search/search.js"></script>
</body>
</html>

868
wisko-gitea/index.html

@ -0,0 +1,868 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="lang:clipboard.copy" content="Copy to clipboard">
<meta name="lang:clipboard.copied" content="Copied to clipboard">
<meta name="lang:search.language" content="en">
<meta name="lang:search.pipeline.stopwords" content="True">
<meta name="lang:search.pipeline.trimmer" content="True">
<meta name="lang:search.result.none" content="No matching documents">
<meta name="lang:search.result.one" content="1 matching document">
<meta name="lang:search.result.other" content="# matching documents">
<meta name="lang:search.tokenizer" content="[\s\-]+">
<link rel="shortcut icon" href="../">
<meta name="generator" content="mkdocs-0.17.3, mkdocs-material-2.7.2">
<title>Wisko Gitea - the wisko manual</title>
<link rel="stylesheet" href="../assets/stylesheets/application.8d40d89b.css">
<link rel="stylesheet" href="../assets/stylesheets/application-palette.6079476c.css">
<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body dir="ltr" data-md-color-primary="green" data-md-color-accent="green">
<svg class="md-svg">
<defs>
</defs>
</svg>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="search" autocomplete="off">
<label class="md-overlay" data-md-component="overlay" for="drawer"></label>
<a href="#wisko-gitea" tabindex="1" class="md-skip">
Skip to content
</a>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid">
<div class="md-flex">
<div class="md-flex__cell md-flex__cell--shrink">
<a href=".." title="the wisko manual" class="md-header-nav__button md-logo">
<i class="md-icon">cloud</i>
</a>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--menu md-header-nav__button" for="drawer"></label>
</div>
<div class="md-flex__cell md-flex__cell--stretch">
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
<span class="md-header-nav__topic">
the wisko manual
</span>
<span class="md-header-nav__topic">
Wisko Gitea
</span>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--search md-header-nav__button" for="search"></label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
<label class="md-icon md-search__icon" for="search"></label>
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
&#xE5CD;
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="result">
<div class="md-search-result__meta">
Type to start searching
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container">
<main class="md-main">
<div class="md-main__inner md-grid" data-md-component="container">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title md-nav__title--site" for="drawer">
<span class="md-nav__button md-logo">
<i class="md-icon">cloud</i>
</span>
the wisko manual
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." title="Index" class="md-nav__link">
Index
</a>
</li>
<li class="md-nav__item">
<a href="../boot2root/" title="Wisko Boot to Root" class="md-nav__link">
Wisko Boot to Root
</a>
</li>
<li class="md-nav__item">
<a href="../faq/" title="Wisko FAQ" class="md-nav__link">
Wisko FAQ
</a>
</li>
<li class="md-nav__item">
<a href="../locked-out/" title="Locked Out of Wisko" class="md-nav__link">
Locked Out of Wisko
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-1/" title="smallmelo.com Migration: Part 1" class="md-nav__link">
smallmelo.com Migration: Part 1
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-2/" title="smallmelo.com Migration: Part 2" class="md-nav__link">
smallmelo.com Migration: Part 2
</a>
</li>
<li class="md-nav__item">
<a href="../smallmelo-migration-3/" title="smallmelo.com Migration: Part 3" class="md-nav__link">
smallmelo.com Migration: Part 3
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="toc">
<label class="md-nav__link md-nav__link--active" for="toc">
Wisko Gitea
</label>
<a href="./" title="Wisko Gitea" class="md-nav__link md-nav__link--active">
Wisko Gitea
</a>
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#before-you-begin-gitea-setup-info" title="before you begin: gitea setup info" class="md-nav__link">
before you begin: gitea setup info
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#where-is-gitea" title="where is gitea" class="md-nav__link">
where is gitea
</a>
</li>
<li class="md-nav__item">
<a href="#where-is-go" title="where is go" class="md-nav__link">
where is go
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#task-summary" title="task summary" class="md-nav__link">
task summary
</a>
</li>
<li class="md-nav__item">
<a href="#set-up-git-subdomain" title="set up git subdomain" class="md-nav__link">
set up git subdomain
</a>
</li>
<li class="md-nav__item">
<a href="#apache-web-server-settings" title="apache web server settings" class="md-nav__link">
apache web server settings
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#apache-configuration-http" title="apache configuration: http" class="md-nav__link">
apache configuration: http
</a>
</li>
<li class="md-nav__item">
<a href="#apache-configuration-https" title="apache configuration: https" class="md-nav__link">
apache configuration: https
</a>
</li>
<li class="md-nav__item">
<a href="#making-apache-certificate" title="making apache certificate" class="md-nav__link">
making apache certificate
</a>
</li>
<li class="md-nav__item">
<a href="#apache-configuration-https-revisited" title="apache configuration: https (revisited)" class="md-nav__link">
apache configuration: https (revisited)
</a>
</li>
<li class="md-nav__item">
<a href="#enable-and-activate" title="enable and activate" class="md-nav__link">
enable and activate
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#gitea-configuration" title="gitea configuration" class="md-nav__link">
gitea configuration
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#gitea-version" title="gitea version" class="md-nav__link">
gitea version
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#https-certs" title="https certs" class="md-nav__link">
https certs
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../geoserver-https/" title="Connecting to Geoserver Over HTTPS" class="md-nav__link">
Connecting to Geoserver Over HTTPS
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary">
<label class="md-nav__title" for="toc">Table of contents</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#before-you-begin-gitea-setup-info" title="before you begin: gitea setup info" class="md-nav__link">
before you begin: gitea setup info
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#where-is-gitea" title="where is gitea" class="md-nav__link">
where is gitea
</a>
</li>
<li class="md-nav__item">
<a href="#where-is-go" title="where is go" class="md-nav__link">
where is go
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#task-summary" title="task summary" class="md-nav__link">
task summary
</a>
</li>
<li class="md-nav__item">
<a href="#set-up-git-subdomain" title="set up git subdomain" class="md-nav__link">
set up git subdomain
</a>
</li>
<li class="md-nav__item">
<a href="#apache-web-server-settings" title="apache web server settings" class="md-nav__link">
apache web server settings
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#apache-configuration-http" title="apache configuration: http" class="md-nav__link">
apache configuration: http
</a>
</li>
<li class="md-nav__item">
<a href="#apache-configuration-https" title="apache configuration: https" class="md-nav__link">
apache configuration: https
</a>
</li>
<li class="md-nav__item">
<a href="#making-apache-certificate" title="making apache certificate" class="md-nav__link">
making apache certificate
</a>
</li>
<li class="md-nav__item">
<a href="#apache-configuration-https-revisited" title="apache configuration: https (revisited)" class="md-nav__link">
apache configuration: https (revisited)
</a>
</li>
<li class="md-nav__item">
<a href="#enable-and-activate" title="enable and activate" class="md-nav__link">
enable and activate
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#gitea-configuration" title="gitea configuration" class="md-nav__link">
gitea configuration
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#gitea-version" title="gitea version" class="md-nav__link">
gitea version
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#https-certs" title="https certs" class="md-nav__link">
https certs
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1 id="wisko-gitea">wisko gitea</h1>
<h2 id="before-you-begin-gitea-setup-info">before you begin: gitea setup info</h2>
<p>(see <a href="../boot2root/">boot to root</a> for details on how gitea was set up).</p>
<h3 id="where-is-gitea">where is gitea</h3>
<p>The wisko gitea instance is installed to <code>$GOPATH/src/code.gitea.io/gitea</code> and there is a symlink to this directory at <code>~/gitea</code>.</p>
<p>This directory is actually a cloned git repo, so you can see what files you've modified from the default by running a <code>git status</code>.</p>
<p>The binary is in that folder, at <code>bin/gitea</code>.</p>
<h3 id="where-is-go">where is go</h3>
<p>Go is installed using <code>goenv</code>, so the global version of go that goenv will set can be printed using:</p>
<pre><code>goenv global
</code></pre>
<p>You can verify you have the goenv go installed by running:</p>
<pre><code>which go
</code></pre>
<p>which should return <code>~/.goenv/shims/go</code>, and </p>
<pre><code>go version
</code></pre>
<p>which should return 1.7.5.</p>
<h2 id="task-summary">task summary</h2>
<p>Making gitea available via the subdomain <code>git.smallmelo.com</code> requires setting up a couple of components:
<em> subdomain
</em> web server to handle redirects
<em> gitea configuration to tell gitea where it is hosted
</em> https certificates valid for the subdomain</p>
<h2 id="set-up-git-subdomain">set up git subdomain</h2>
<p>First thing is, we need to set up the subdomain <code>git.smallmelo.com</code> to redirect to the server. This depends on the hosting provider, but should be an A Name Record:</p>
<p><strong>A Record</strong>:</p>
<ul>
<li>Record: git</li>
<li>Value: <your ip address></li>
</ul>
<h2 id="apache-web-server-settings">apache web server settings</h2>
<p>Setting up a name record for the subdomain will result in requests for "git.smallmelo.com" and "smallmelo.com" to both go to your server. The server will be able to see what domain/subdomain was requested in each request, so we need to set up rules to handle the subdomain correctly.</p>
<p>If the git subdomain is not set up with the DNS provider yet, you can still test it locally. From whatever machine you're connecting to wisk as, add an entry to <code>/etc/hosts</code> that will map the subdomain to wisko's IP:</p>
<pre><code>vim /etc/hosts
</code></pre>
<p>and add</p>
<pre><code>159.65.75.41 git.smallmelo.com
</code></pre>
<p>(Do this on your machine, not on wisko.)</p>
<h3 id="apache-configuration-http">apache configuration: http</h3>
<p>Now we'll set up the Apache web server to redirect any http requests to <code>git.smallmelo.com</code> on port 80 on to gitea at port 3000.</p>
<p>Create a new apache config for this site at <code>/etc/apache2/sites-available/git-smallmelo.conf</code> that will contain all our settings. Set up a listener on port 80, all interfaces, that looks for requests to <code>git.smallmelo.com</code>:</p>
<p><strong><code>/etc/apache2/sites-available/git-smallmelo.conf</code></strong>:</p>
<pre><code>&lt;VirtualHost *:80&gt;
ServerName git.smallmelo.com
ServerAdmin melo@smallmelo.com
# -------------------------
# Need to enable the following mods:
# a2enmod proxy
# a2enmod proxy_http
# Preserve original request (git.smallmelo.com)
ProxyPreserveHost On
# Set up proxy
&lt;Proxy *&gt;
Order allow,deny
Allow from all
&lt;/Proxy&gt;
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
# -------------------------
ErrorLog ${APACHE_LOG_DIR}/git-smallmelo-error.log
CustomLog ${APACHE_LOG_DIR}/git-smallmelo-access.log combined
# Note that we don't set a document root
# or permissions for a web directory
# because we're just forwarding traffic
# to gitea, which runs an entirely separate
# web server.
&lt;/VirtualHost&gt;
</code></pre>
<h3 id="apache-configuration-https">apache configuration: https</h3>
<p>We also need to set up Apache to redirect https requests to <code>git.smallmelo.com</code> on port 443 to gitea at port 3000.</p>
<p>This will require an HTTPS certificate for <code>git.smallmelo.com</code>, so fire up lets encrypt.</p>
<h3 id="making-apache-certificate">making apache certificate</h3>
<p>Create an https apache config for this site at <code>/etc/apache2/sites-available/git-smallmelo-le-ssl.conf</code> that will contain all our settings. Set up a listener on port 443, all interfaces, that looks for requests to <code>git.smallmelo.com</code>.</p>
<p>Run the certbot:</p>
<pre><code>$ sudo certbot certonly --non-interactive --agree-tos --email &quot;melo@smallmelo.com&quot; --apache -d &quot;git.smallmelo.com&quot;
</code></pre>
<p>This will take a minute, but should conclude with:</p>
<pre><code>IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/git.smallmelo.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/git.smallmelo.com/privkey.pem
Your cert will expire on 2018-06-24. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
&quot;certbot renew&quot;
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
</code></pre>
<h3 id="apache-configuration-https-revisited">apache configuration: https (revisited)</h3>
<p>Note that once the HTTPS request hits the server, the proxy does not need to happen over HTTPS since it happens within a single machine.</p>
<p><strong><code>/etc/apache2/sites-available/git-smallmelo-le-ssl.conf</code></strong>:</p>
<pre><code>&lt;IfModule mod_ssl.c&gt;
&lt;VirtualHost *:443&gt;
ServerName git.smallmelo.com
ServerAdmin melo@smallmelo.com
ErrorLog ${APACHE_LOG_DIR}/git-smallmelo-ssl-error.log
CustomLog ${APACHE_LOG_DIR}/git-smallmelo-ssl-access.log combined
# -------------------------
# Need to enable the following mods:
# a2enmod proxy
# a2enmod proxy_http
SSLEngine on
SSLProxyEngine On
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/git.smallmelo.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/git.smallmelo.com/privkey.pem
# Preserve original request (git.smallmelo.com)
ProxyPreserveHost On
# Set up proxy
&lt;Proxy *&gt;
Order allow,deny
Allow from all
&lt;/Proxy&gt;
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
# -------------------------
&lt;/VirtualHost&gt;
&lt;/IfModule&gt;
</code></pre>
<h3 id="enable-and-activate">enable and activate</h3>
<p>Now enable the mods:</p>
<pre><code>a2enmod proxy
a2enmod proxy_http
</code></pre>
<p>Now enable the site:</p>
<pre><code>a2ensite git-smallmelo
a2ensite git-smallmelo-le-ssl
</code></pre>
<p>Now activate the site:</p>
<pre><code>service apache2 reload
</code></pre>
<p>Once the A Name DNS record propagates, you can test out the Apache configuration.</p>
<p>Run a dummy HTTP web server on port 3000:</p>
<pre><code>cat &quot;&lt;h2&gt;hello world&lt;/h2&gt;&quot; &gt; index.html
python3 -m http.server 3000
</code></pre>
<p>Now if you visit the subdomain:</p>
<pre><code>http://git.smallmelo.com
</code></pre>
<p>you should see a hit in the window running the HTTP server on port 3000.</p>
<h2 id="gitea-configuration">gitea configuration</h2>
<h3 id="gitea-version">gitea version</h3>
<p>Start out by checking which version of gitea you have. We have checked out release <code>1.2</code>, which means that our git repo is in a "headless" state. Any changes that we make are going to go into a dead end.</p>
<p>But that's perfect - we can keep track of all our changes relative to version 1.2, and revert any changes we don't want anymore.</p>
<p>Make the following changes to the default <code>app.ini</code> gitea config file:</p>
<pre><code>RUN_USER = melo
DOMAIN = git.smallmelo.com
ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s/
</code></pre>
<p>(Note, you can use git diff to pick up the changes in the file.)</p>
<p>Kill any instances of gitea that are already running on port 3000, and start up the gitea server:</p>
<pre><code>cd ~/gitea
./gitea web
</code></pre>
<p>(or, do it in a screen, <a href="../boot2root/">as mentioned in the wisko boot to root doc</a>).</p>
<h2 id="https-certs">https certs</h2>
<p>See the above modifications to the document about certificates. A new SSL certificate for the git subdomain (<code>git.smallmelo.com</code>) was needed, so we used certbot to make it.</p>
<p>To explain the HTTPS certificate setup for git.smallmelo.com a bit more:</p>
<ul>
<li>Gitea runs its own web server, hosts its own files, and does not require an Apache server to run. We're just using Apache for convenience.</li>
<li>Just as HTTP requests to smallmelo.com always go to port 80, where there is an Apache server listening, HTTPS requests to smallmelo.com always go to port 443, where there is also an Apache server listening</li>
<li>HTTPS requests are handled by the Apache web server, so the certificates to create an encrypted session are handled by the Apache web server</li>
<li>Apache must have an SSL certifiate for <code>git.smallmelo.com</code> to make the connection, or the browser will complain that the server is not configured correctly</li>
<li>When we make a request for a gitea resource (say, <code>https://git.smallmelo.com/melo/my-cool-project</code>), the subdomain tells Apache where to forward the request (to gitea on port 3000), and the rest of the url (<code>/melo/my-cool-project</code>) is passed on to gitea, unmodified</li>
<li>The request from Apache to gitea happens on a single machine, so the connection does not need to be encrypted, hence Apache's proxy requests go to <code>http://localhost:3000</code> and not <code>https://localhost:3000</code></li>
</ul>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="../smallmelo-migration-3/" title="smallmelo.com Migration: Part 3" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
smallmelo.com Migration: Part 3
</span>
</div>
</a>
<a href="../geoserver-https/" title="Connecting to Geoserver Over HTTPS" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
Connecting to Geoserver Over HTTPS
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright 2018 Charles Reid
</div>
powered by
<a href="http://www.mkdocs.org">MkDocs</a>
and
<a href="https://squidfunk.github.io/mkdocs-material/">
Material for MkDocs</a>
</div>
</div>
</div>
</footer>
</div>
<script src="../assets/javascripts/application.0cf9b500.js"></script>
<script>app.initialize({version:"0.17.3",url:{base:".."}})</script>
<script src="../search/require.js"></script>
<script src="../search/search.js"></script>
</body>
</html>
Loading…
Cancel
Save