123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  5. <head>
  6. <title></title>
  7. <!-- 2018-06-04 Mon 18:39 -->
  8. <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  9. <meta name="generator" content="Org-mode" />
  10. <meta name="author" content="Bob Mottram" />
  11. <meta name="description" content="Freedombone developers guide"
  12. />
  13. <meta name="keywords" content="freedombone, developers" />
  14. <style type="text/css">
  15. <!--/*--><![CDATA[/*><!--*/
  16. .title { text-align: center; }
  17. .todo { font-family: monospace; color: red; }
  18. .done { color: green; }
  19. .tag { background-color: #eee; font-family: monospace;
  20. padding: 2px; font-size: 80%; font-weight: normal; }
  21. .timestamp { color: #bebebe; }
  22. .timestamp-kwd { color: #5f9ea0; }
  23. .right { margin-left: auto; margin-right: 0px; text-align: right; }
  24. .left { margin-left: 0px; margin-right: auto; text-align: left; }
  25. .center { margin-left: auto; margin-right: auto; text-align: center; }
  26. .underline { text-decoration: underline; }
  27. #postamble p, #preamble p { font-size: 90%; margin: .2em; }
  28. p.verse { margin-left: 3%; }
  29. pre {
  30. border: 1px solid #ccc;
  31. box-shadow: 3px 3px 3px #eee;
  32. padding: 8pt;
  33. font-family: monospace;
  34. overflow: auto;
  35. margin: 1.2em;
  36. }
  37. pre.src {
  38. position: relative;
  39. overflow: visible;
  40. padding-top: 1.2em;
  41. }
  42. pre.src:before {
  43. display: none;
  44. position: absolute;
  45. background-color: white;
  46. top: -10px;
  47. right: 10px;
  48. padding: 3px;
  49. border: 1px solid black;
  50. }
  51. pre.src:hover:before { display: inline;}
  52. pre.src-sh:before { content: 'sh'; }
  53. pre.src-bash:before { content: 'sh'; }
  54. pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
  55. pre.src-R:before { content: 'R'; }
  56. pre.src-perl:before { content: 'Perl'; }
  57. pre.src-java:before { content: 'Java'; }
  58. pre.src-sql:before { content: 'SQL'; }
  59. table { border-collapse:collapse; }
  60. caption.t-above { caption-side: top; }
  61. caption.t-bottom { caption-side: bottom; }
  62. td, th { vertical-align:top; }
  63. th.right { text-align: center; }
  64. th.left { text-align: center; }
  65. th.center { text-align: center; }
  66. td.right { text-align: right; }
  67. td.left { text-align: left; }
  68. td.center { text-align: center; }
  69. dt { font-weight: bold; }
  70. .footpara:nth-child(2) { display: inline; }
  71. .footpara { display: block; }
  72. .footdef { margin-bottom: 1em; }
  73. .figure { padding: 1em; }
  74. .figure p { text-align: center; }
  75. .inlinetask {
  76. padding: 10px;
  77. border: 2px solid gray;
  78. margin: 10px;
  79. background: #ffffcc;
  80. }
  81. #org-div-home-and-up
  82. { text-align: right; font-size: 70%; white-space: nowrap; }
  83. textarea { overflow-x: auto; }
  84. .linenr { font-size: smaller }
  85. .code-highlighted { background-color: #ffff00; }
  86. .org-info-js_info-navigation { border-style: none; }
  87. #org-info-js_console-label
  88. { font-size: 10px; font-weight: bold; white-space: nowrap; }
  89. .org-info-js_search-highlight
  90. { background-color: #ffff00; color: #000000; font-weight: bold; }
  91. /*]]>*/-->
  92. </style>
  93. <link rel="stylesheet" type="text/css" href="freedombone.css" />
  94. <script type="text/javascript">
  95. /*
  96. @licstart The following is the entire license notice for the
  97. JavaScript code in this tag.
  98. Copyright (C) 2012-2013 Free Software Foundation, Inc.
  99. The JavaScript code in this tag is free software: you can
  100. redistribute it and/or modify it under the terms of the GNU
  101. General Public License (GNU GPL) as published by the Free Software
  102. Foundation, either version 3 of the License, or (at your option)
  103. any later version. The code is distributed WITHOUT ANY WARRANTY;
  104. without even the implied warranty of MERCHANTABILITY or FITNESS
  105. FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
  106. As additional permission under GNU GPL version 3 section 7, you
  107. may distribute non-source (e.g., minimized or compacted) forms of
  108. that code without the copy of the GNU GPL normally required by
  109. section 4, provided you include this license notice and a URL
  110. through which recipients can access the Corresponding Source.
  111. @licend The above is the entire license notice
  112. for the JavaScript code in this tag.
  113. */
  114. <!--/*--><![CDATA[/*><!--*/
  115. function CodeHighlightOn(elem, id)
  116. {
  117. var target = document.getElementById(id);
  118. if(null != target) {
  119. elem.cacheClassElem = elem.className;
  120. elem.cacheClassTarget = target.className;
  121. target.className = "code-highlighted";
  122. elem.className = "code-highlighted";
  123. }
  124. }
  125. function CodeHighlightOff(elem, id)
  126. {
  127. var target = document.getElementById(id);
  128. if(elem.cacheClassElem)
  129. elem.className = elem.cacheClassElem;
  130. if(elem.cacheClassTarget)
  131. target.className = elem.cacheClassTarget;
  132. }
  133. /*]]>*///-->
  134. </script>
  135. </head>
  136. <body>
  137. <div id="preamble" class="status">
  138. <a name="top" id="top"></a>
  139. </div>
  140. <div id="content">
  141. <h1 class="title"></h1>
  142. <div class="figure">
  143. <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
  144. </p>
  145. </div>
  146. <div id="outline-container-sec-1" class="outline-2">
  147. <h2 id="sec-1">Developers Guide</h2>
  148. </div>
  149. <div id="outline-container-sec-2" class="outline-2">
  150. <h2 id="sec-2">Introduction</h2>
  151. <div class="outline-text-2" id="text-2">
  152. <p>
  153. Freedombone consists of a set of bash scripts. There are a lot of them, but they're not very complicated. If you're familiar with the GNU/Linux commandline and can hack a bash script then you can probably add a new app or fix a bug in the system. There are no trendy development frameworks to learn or to get in your way. You might also want to consult the <a href="./codeofconduct.html">Code of Conduct</a>, and there is a Matrix room at <b>#fbone:matrix.freedombone.net</b>
  154. </p>
  155. </div>
  156. </div>
  157. <div id="outline-container-sec-3" class="outline-2">
  158. <h2 id="sec-3">Adding extra apps</h2>
  159. <div class="outline-text-2" id="text-3">
  160. <p>
  161. Suppose you have some internet application which you want to add to the system. To do this you need to create an app script which tells the system how to install/remove and also backup/restore. The script should be designed to work with the current stable version of Debian.
  162. </p>
  163. <p>
  164. There's a command which you can use to generate scripts for new apps. Some examples are as follows:
  165. </p>
  166. <p>
  167. To create a script for a generic PHP plus MySql/MariaDB web app with a couple of extra packages:
  168. </p>
  169. <div class="org-src-container">
  170. <pre class="src src-bash">freedombone-template --app [name] -e [email] -r [repo url] \
  171. --packages "cowsay libssl-dev" \
  172. -c [commit] --php yes -d mariadb &gt; \
  173. src/freedombone-app-myappname
  174. </pre>
  175. </div>
  176. <p>
  177. For a Nodejs app with MySql/MariaDB database:
  178. </p>
  179. <div class="org-src-container">
  180. <pre class="src src-bash">freedombone-template --app [name] -e [email] -r [repo url] \
  181. -c [commit] --node yes -d mariadb \
  182. --dir /etc/myappname --daemon yes &gt; \
  183. src/freedombone-app-myappname
  184. </pre>
  185. </div>
  186. <p>
  187. For a Python app with Postgresql database:
  188. </p>
  189. <div class="org-src-container">
  190. <pre class="src src-bash">freedombone-template --app [name] -e [email] -r [repo url] \
  191. -c [commit] -d postgresql \
  192. --dir /etc/myappname --daemon yes &gt; \
  193. src/freedombone-app-myappname
  194. </pre>
  195. </div>
  196. <p>
  197. For a Python app without any database, communicating between the daemon and the web server on port 1234:
  198. </p>
  199. <div class="org-src-container">
  200. <pre class="src src-bash">freedombone-template --app [name] -e [email] -r [repo url] \
  201. -c [commit] --dir /etc/myappname \
  202. --daemon yes --portinternal 1234 &gt; \
  203. src/freedombone-app-myappname
  204. </pre>
  205. </div>
  206. <p>
  207. For an app without any database which communicates directly on a particular port through the firewall:
  208. </p>
  209. <div class="org-src-container">
  210. <pre class="src src-bash">freedombone-template --app [name] -e [email] -r [repo url] \
  211. -c [commit] --dir /etc/myappname \
  212. --daemon yes --port 5000 &gt; \
  213. src/freedombone-app-myappname
  214. </pre>
  215. </div>
  216. <p>
  217. A generic PHP plus MySql/MariaDB web app which is only available on an onion address:
  218. </p>
  219. <div class="org-src-container">
  220. <pre class="src src-bash">freedombone-template --app [name] -e [email] -r [repo url] \
  221. -c [commit] --php yes -d mariadb \
  222. --onion yes &gt; \
  223. src/freedombone-app-myappname
  224. </pre>
  225. </div>
  226. <p>
  227. For more details see the manpage:
  228. </p>
  229. <div class="org-src-container">
  230. <pre class="src src-bash">man freedombone-template
  231. </pre>
  232. </div>
  233. <p>
  234. The template command won't give you a fully working app, but it will give you a big head start and avoid a lot of potential mistakes. It's highly likely that you'll still need to add extra configuration for your particular app, especially within the <b>install_app</b> function.
  235. </p>
  236. <p>
  237. When your new script is ready for testing you can install it with:
  238. </p>
  239. <div class="org-src-container">
  240. <pre class="src src-bash">make install
  241. </pre>
  242. </div>
  243. <p>
  244. Then run the administrator control panel and you should see the new app within <b>Add/Remove apps</b>.
  245. </p>
  246. <p>
  247. Submit your working app to <b><a href="https://code.freedombone.net/bashrc/freedombone/issues">https://code.freedombone.net/bashrc/freedombone/issues</a></b>, create a pull request or if you don't have an account there you can send patches via email to bob@freedombone.net.
  248. </p>
  249. </div>
  250. </div>
  251. <div id="outline-container-sec-4" class="outline-2">
  252. <h2 id="sec-4">Customising mesh images</h2>
  253. <div class="outline-text-2" id="text-4">
  254. <p>
  255. If you want to make your own specially branded version of the mesh images, such as for a particular event, then to change the default desktop backgrounds edit the images within <b>img/backgrounds</b> and to change the available avatars and desktop icons edit the images within <b>img/avatars</b>. Re-create disk images using the instructions shown previously.
  256. </p>
  257. <p>
  258. If you need particular <i>dconf</i> commands to alter desktop appearance or behavior then see the function <i>mesh_client_startup_applications</i> within <b>src/freedombone-image-customise</b>.
  259. </p>
  260. <div class="figure">
  261. <p><a href="fdl-1.3.txt" width="10%" height="2%" align="center"><img src="images/gfdl.png" alt="gfdl.png" width="10%" height="2%" align="center" /></a>
  262. </p>
  263. </div>
  264. </div>
  265. </div>
  266. </div>
  267. <div id="postamble" class="status">
  268. <style type="text/css">
  269. .back-to-top {
  270. position: fixed;
  271. bottom: 2em;
  272. right: 0px;
  273. text-decoration: none;
  274. color: #000000;
  275. background-color: rgba(235, 235, 235, 0.80);
  276. font-size: 12px;
  277. padding: 1em;
  278. display: none;
  279. }
  280. .back-to-top:hover {
  281. background-color: rgba(135, 135, 135, 0.50);
  282. }
  283. </style>
  284. <div class="back-to-top">
  285. <a href="#top">Back to top</a> | <a href="mailto:bob@freedombone.net">E-mail me</a>
  286. </div>
  287. </div>
  288. </body>
  289. </html>