Browse Source

Merge branch 'stretch' of https://github.com/bashrc/freedombone

Bob Mottram 7 years ago
parent
commit
28711ca1e5

+ 92
- 0
doc/EN/armbian.org View File

1
+#+TITLE:
2
+#+AUTHOR: Bob Mottram
3
+#+EMAIL: bob@freedombone.net
4
+#+KEYWORDS: freedombox, debian, armbian
5
+#+DESCRIPTION: Installing Freedombone on Armbian
6
+#+OPTIONS: ^:nil toc:nil
7
+#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="freedombone.css" />
8
+
9
+#+BEGIN_CENTER
10
+[[file:images/logo.png]]
11
+#+END_CENTER
12
+
13
+
14
+#+begin_export html
15
+<center><h1>Installing on Armbian</h1></center>
16
+#+end_export
17
+
18
+If you have a single board ARM computer which isn't one of the supported ones then you can probably still install Freedombone onto it if it has a [[https://www.armbian.com/download/][Debian Stretch Armbian image]] available for it.
19
+
20
+Download the Armbian image for your board. It must be version 9 (Stretch), otherwise it won't work. Extract the image from its archive, then copy it to a microSD card:
21
+
22
+#+begin_src bash
23
+sudo dd if=[Armbian .img file] of=/dev/sdX
24
+#+end_src
25
+
26
+Where */dev/sdX* is the path for the microSD drive on your system.
27
+
28
+When that's done use a tool such as *Gparted* to resize the partition on the microSD card to fill up any remaining available space.
29
+
30
+Insert the microSD drive into your ARM board, connect it to your internet router with an ethernet cable and plug in the power.
31
+
32
+The board should then show up somewhere on your local network. You can log into your internet router to see what devices are connected and obtain the local IP address for the board that way, or use a network scanning tool.
33
+
34
+Once you know the local IP address of your ARM board then you can log into it with:
35
+
36
+#+begin_src bash
37
+ssh root@[local IP address]
38
+#+end_src
39
+
40
+Using the default Armbian password of *1234*. You should see the Armbian welcome message and will be asked to change the password, then create a new user account.
41
+
42
+#+BEGIN_CENTER
43
+[[file:images/armbian_setup.jpg]]
44
+#+END_CENTER
45
+
46
+When the user account is created type *exit* to leave the ssh session then log back in with your new user account.
47
+
48
+#+begin_src bash
49
+ssh myusername@[local IP address]
50
+#+end_src
51
+
52
+Become the root user:
53
+
54
+#+begin_src bash
55
+sudo su
56
+#+end_src
57
+
58
+Then clone the Freedombone repository and checkout the stretch development branch.
59
+
60
+#+begin_src bash
61
+git clone https://github.com/bashrc/freedombone
62
+cd freedombone
63
+git checkout stretch
64
+#+end_src
65
+
66
+Install the Freedombone commands:
67
+
68
+#+begin_src bash
69
+make install
70
+#+end_src
71
+
72
+And now you can begin installing the Freedombone system. There are two ways of doing this. If you already own a domain name which you want to use then run:
73
+
74
+#+begin_src bash
75
+freedombone menuconfig
76
+#+end_src
77
+
78
+Alternatively, if you don't own a domain name, don't have administrator access to your internet router or if you want to be able to access your sites only via onion addresses then run:
79
+
80
+#+begin_src bash
81
+freedombone menuconfig-onion
82
+#+end_src
83
+
84
+You will then be taken through a few questions and the system will install. Afterwards you'll be able to log into your system with:
85
+
86
+#+begin_src bash
87
+ssh myusername@freedombone.local -p 2222
88
+#+end_src
89
+
90
+Then select *Administrator options*. If you chose the first install option using a domain name then go to *Show Firewall* and make sure that the ports shown are forwarded from your internet router to your ARM board.
91
+
92
+You can then [[./apps.html][add or remove apps]] as needed.

+ 2
- 0
doc/EN/index.org View File

31
 
31
 
32
 Or you can install [[./debianinstall.html][onto an existing Debian system]].
32
 Or you can install [[./debianinstall.html][onto an existing Debian system]].
33
 
33
 
34
+If you have a single board ARM computer which isn't one of the officially supported ones, such as Raspberry Pi, then you may still be able to install [[./armbian.html][Freedombone with Armbian]].
35
+
34
 Want to make a community mesh network which doesn't depend upon the internet? The [[./mesh.html][Freedombone Mesh]] is a wireless solution for autonomous communication that can be rapidly deployed in temporary, emergency or post-disaster situations where internet access is unavailable or compromised.
36
 Want to make a community mesh network which doesn't depend upon the internet? The [[./mesh.html][Freedombone Mesh]] is a wireless solution for autonomous communication that can be rapidly deployed in temporary, emergency or post-disaster situations where internet access is unavailable or compromised.
35
 
37
 
36
 After installation it's possible that you might want some advice on how to run your system and set up apps to work nicely with it.
38
 After installation it's possible that you might want some advice on how to run your system and set up apps to work nicely with it.

BIN
img/armbian_setup.jpg View File


+ 1
- 1
src/freedombone-app-gnusocial View File

903
 
903
 
904
     # Currently Pleroma won't install on ARM systems
904
     # Currently Pleroma won't install on ARM systems
905
     # because it uses node-sass which doesn't support ARM
905
     # because it uses node-sass which doesn't support ARM
906
-    if [[ "$(arch)" == "arm"* ]]; then
906
+    if [[ "$(arch)" == "arm"* || "$(arch)" == "aarch"* ]]; then
907
         echo -m $'WARNING: Pleroma currently does not support ARM '
907
         echo -m $'WARNING: Pleroma currently does not support ARM '
908
         echo $'architecture, so it will not be installed'
908
         echo $'architecture, so it will not be installed'
909
     else
909
     else

+ 3
- 1
src/freedombone-app-mediagoblin View File

295
     function_check install_nodejs
295
     function_check install_nodejs
296
     install_nodejs mediagoblin
296
     install_nodejs mediagoblin
297
 
297
 
298
-    apt-get install -yq python python-dev python-lxml python-imaging python-virtualenv
298
+    apt-get install -yq python python-dev python-lxml python-imaging python-virtualenv python-setuptools
299
     apt-get install -yq automake perl sqlite python-paste python-pastedeploy python-pastescript
299
     apt-get install -yq automake perl sqlite python-paste python-pastedeploy python-pastescript
300
     apt-get install -yq python3 python3-dev libpython3-dev python3-lxml python3-pil
300
     apt-get install -yq python3 python3-dev libpython3-dev python3-lxml python3-pil
301
     groupadd mediagoblin
301
     groupadd mediagoblin
302
+    apt-get install -yq python-service-identity python-ndg-httpsclient
303
+
302
     useradd -c "GNU MediaGoblin system account" -d /var/lib/mediagoblin -m -r -g www-data mediagoblin
304
     useradd -c "GNU MediaGoblin system account" -d /var/lib/mediagoblin -m -r -g www-data mediagoblin
303
     usermod --append -G mediagoblin mediagoblin
305
     usermod --append -G mediagoblin mediagoblin
304
     mkdir -p /var/lib/mediagoblin
306
     mkdir -p /var/lib/mediagoblin

+ 1
- 1
src/freedombone-app-postactiv View File

921
 
921
 
922
     # Currently Pleroma won't install on ARM systems
922
     # Currently Pleroma won't install on ARM systems
923
     # because it uses node-sass which doesn't support ARM
923
     # because it uses node-sass which doesn't support ARM
924
-    if [[ "$(arch)" == "arm"* ]]; then
924
+    if [[ "$(arch)" == "arm"* || "$(arch)" == "aarch"* ]]; then
925
         echo -m $'WARNING: Pleroma currently does not support ARM '
925
         echo -m $'WARNING: Pleroma currently does not support ARM '
926
         echo $'architecture, so it will not be installed'
926
         echo $'architecture, so it will not be installed'
927
     else
927
     else

+ 2
- 1
src/freedombone-app-searx View File

828
 
828
 
829
     apt-get -yq install python-pip libyaml-dev python-werkzeug python-babel python-lxml
829
     apt-get -yq install python-pip libyaml-dev python-werkzeug python-babel python-lxml
830
     apt-get -yq install git build-essential libxslt-dev python-dev python-virtualenv zlib1g-dev uwsgi uwsgi-plugin-python imagemagick
830
     apt-get -yq install git build-essential libxslt-dev python-dev python-virtualenv zlib1g-dev uwsgi uwsgi-plugin-python imagemagick
831
-    apt-get -yq install apache2-utils
831
+    apt-get -yq install apache2-utils python-setuptools
832
+    apt-get -yq install python-service-identity python-ndg-httpsclient
832
 
833
 
833
     apt-get -yq remove --purge apache2-bin*
834
     apt-get -yq remove --purge apache2-bin*
834
     if [ -d /etc/apache2 ]; then
835
     if [ -d /etc/apache2 ]; then

+ 7
- 160
src/freedombone-utils-gnusocialtools View File

29
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
29
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
30
 
30
 
31
 # Qvitter upstream: https://git.gnu.io/h2p/Qvitter"
31
 # Qvitter upstream: https://git.gnu.io/h2p/Qvitter"
32
-QVITTER_THEME_REPO="https://git.postactiv.com/bob/Qvitter"
33
-QVITTER_THEME_COMMIT='b5791cf935a6391c492cefa1ffa50cc3cea44c12'
32
+QVITTER_THEME_REPO="https://github.com/bashrc/Qvitter"
33
+QVITTER_THEME_COMMIT='c6f09bda4e45be4290cf7409fa5efb4420538032'
34
 
34
 
35
 PLEROMA_REPO="https://gitgud.io/lambadalambda/pleroma-fe"
35
 PLEROMA_REPO="https://gitgud.io/lambadalambda/pleroma-fe"
36
 PLEROMA_COMMIT='cbe652f2d94d81fa54a37378b7ff014c4391ca5e'
36
 PLEROMA_COMMIT='cbe652f2d94d81fa54a37378b7ff014c4391ca5e'
37
 
37
 
38
-ARMADILLO_REPO="https://git.postactiv.com/maiya/Armadillo"
39
-ARMADILLO_COMMIT='ec3938a678f373156c4cbf37926c9a5ab68222c4'
40
-
41
 SHARINGS_REPO="http://git.lasindias.club/bashrc/Sharings"
38
 SHARINGS_REPO="http://git.lasindias.club/bashrc/Sharings"
42
 SHARINGS_COMMIT='d5c6c7f855d9afff9086c09ea706f38c859bc0d4'
39
 SHARINGS_COMMIT='d5c6c7f855d9afff9086c09ea706f38c859bc0d4'
43
 SHARINGS_THEME_REPO="http://git.lasindias.club/manuel/SharingsTheme"
40
 SHARINGS_THEME_REPO="http://git.lasindias.club/manuel/SharingsTheme"
163
     echo "0"
160
     echo "0"
164
 }
161
 }
165
 
162
 
166
-function armadillo_set_background_image_from_url {
167
-    domain_name="$1"
168
-    url="$2"
169
-
170
-    if [ ${#domain_name} -eq 0 ]; then
171
-        echo "1"
172
-        return
173
-    fi
174
-
175
-    ext=
176
-    if [ ${#url} -gt 0 ]; then
177
-        if [[ "$url" == *".jpeg" || "$url" == *".jpg" ]]; then
178
-            ext="jpg"
179
-        fi
180
-        if [[ "$url" == *".png" ]]; then
181
-            ext="png"
182
-        fi
183
-        if [[ "$url" == *".gif" ]]; then
184
-            ext="gif"
185
-        fi
186
-    fi
187
-
188
-    if [ ${#ext} -gt 0 ]; then
189
-        cd /var/www/${domain_name}/htdocs
190
-
191
-        # remove any existing image
192
-        if [ -f bg_custom.${ext} ]; then
193
-            rm bg_custom.${ext}
194
-        fi
195
-
196
-        # get the new image
197
-        wget "$url" -O bg_custom.${ext}
198
-        if [ ! -f bg_custom.${ext} ]; then
199
-            echo "$url"
200
-            echo $'Custom background image for armadillo could not be downloaded'
201
-            echo "1"
202
-            return
203
-        fi
204
-
205
-        if [ -d /var/www/${domain_name}/htdocs/armadillo ]; then
206
-            cd /var/www/${domain_name}/htdocs/armadillo
207
-            cp ../bg_custom.${ext} media/img/bg_custom.${ext}
208
-            sed -i "s|\"background\":.*|\"background\": \"armadillo/media/img/background.jpeg\"," config.json
209
-        fi
210
-
211
-        qvitter_update_background ${domain_name} ${ext}
212
-
213
-        rm bg_custom.${ext}
214
-    else
215
-        echo "2"
216
-        return
217
-    fi
218
-
219
-    echo "0"
220
-}
221
-
222
 function install_qvitter {
163
 function install_qvitter {
223
     domain_name=$1
164
     domain_name=$1
224
     app_name=$2
165
     app_name=$2
260
         git_clone $QVITTER_THEME_REPO Qvitter
201
         git_clone $QVITTER_THEME_REPO Qvitter
261
     fi
202
     fi
262
 
203
 
204
+    if [ ! -d /var/www/${domain_name}/htdocs/local/plugins/Qvitter ]; then
205
+        echo $'Qvitter repo was not installed'
206
+        exit 835638
207
+    fi
208
+
263
     cd /var/www/${domain_name}/htdocs/local/plugins/Qvitter
209
     cd /var/www/${domain_name}/htdocs/local/plugins/Qvitter
264
     git checkout $QVITTER_THEME_COMMIT -b $QVITTER_THEME_COMMIT
210
     git checkout $QVITTER_THEME_COMMIT -b $QVITTER_THEME_COMMIT
265
 
211
 
329
     fi
275
     fi
330
 }
276
 }
331
 
277
 
332
-function install_armadillo_front_end {
333
-    app_name="$1"
334
-    armadillo_domain="$2"
335
-    background_url="$3"
336
-
337
-    if [ ! -d $INSTALL_DIR/armadillo ]; then
338
-        function_check git_clone
339
-        git_clone $ARMADILLO_REPO $INSTALL_DIR/armadillo
340
-        if [ ! -d $INSTALL_DIR/armadillo ]; then
341
-            echo $'Unable to clone armadillo repo'
342
-            exit 35722
343
-        fi
344
-    fi
345
-
346
-    cd $INSTALL_DIR/armadillo
347
-    git checkout $ARMADILLO_COMMIT -b $ARMADILLO_COMMIT
348
-    set_completion_param "${app_name} armadillo commit" "$ARMADILLO_COMMIT"
349
-
350
-    cp armadillo/config.json.example armadillo/config.json
351
-    if [[ $ONION_ONLY == 'no' ]]; then
352
-        sed -i "s|\"server\".*|\"server\": \"https://${armadillo_domain}\",|g" armadillo/config.json
353
-    else
354
-        sed -i "s|\"server\".*|\"server\": \"http://${armadillo_domain}\",|g" armadillo/config.json
355
-    fi
356
-    owner='<a href=\\"'"https://${armadillo_domain}/$MY_USERNAME"'\\">@'"$MY_USERNAME@${armadillo_domain}"'</a>'
357
-    sed -i "s|\"owner\".*|\"owner\": \"$owner\",|g" armadillo/config.json
358
-    cp -r $INSTALL_DIR/armadillo/armadillo /var/www/${armadillo_domain}/htdocs/
359
-    cp $INSTALL_DIR/armadillo/armadillo.html /var/www/${armadillo_domain}/htdocs/index.html
360
-    cp $INSTALL_DIR/armadillo/dash.html /var/www/${armadillo_domain}/htdocs/dash.html
361
-
362
-    armadillo_set_background_image_from_url "$armadillo_domain" "$background_url"
363
-
364
-    nginx_site=/etc/nginx/sites-available/${armadillo_domain}
365
-    sed -i 's|index index.php;|index index.html;|g' $nginx_site
366
-
367
-    if [ -f /var/www/${armadillo_domain}/htdocs/index.php ]; then
368
-        mv /var/www/${armadillo_domain}/htdocs/index.php /var/www/${armadillo_domain}/htdocs/index_qvitter.php
369
-    fi
370
-    sed -i 's|index.php|index_qvitter.php|g' $nginx_site
371
-
372
-    chown -R www-data:www-data /var/www/${armadillo_domain}/htdocs
373
-}
374
 
278
 
375
 function install_pleroma_front_end {
279
 function install_pleroma_front_end {
376
     app_name="$1"
280
     app_name="$1"
489
     fi
393
     fi
490
 }
394
 }
491
 
395
 
492
-function upgrade_armadillo {
493
-    domain_name="$1"
494
-    app_name="$2"
495
-    background_url="$3"
496
-
497
-    if [ -d $INSTALL_DIR/armadillo ]; then
498
-        set_repo_commit $INSTALL_DIR/armadillo "${app_name} armadillo commit" "$ARMADILLO_COMMIT" $ARMADILLO_REPO
499
-        cd $INSTALL_DIR/armadillo
500
-
501
-        if [ -f $INSTALL_DIR/armadillo/armadillo/config.json ]; then
502
-            rm $INSTALL_DIR/armadillo/armadillo/config.json
503
-        fi
504
-        cp -r $INSTALL_DIR/armadillo/armadillo /var/www/${armadillo_domain}/htdocs/
505
-        cp $INSTALL_DIR/armadillo/armadillo.html /var/www/${armadillo_domain}/htdocs/index.html
506
-        cp $INSTALL_DIR/armadillo/dash.html /var/www/${armadillo_domain}/htdocs/dash.html
507
-        chown -R www-data:www-data /var/www/${domain_name}/htdocs
508
-    else
509
-        install_armadillo_front_end "${app_name}" "${domain_name}" "${background_url}"
510
-    fi
511
-}
512
-
513
 function gnusocial_hourly_script {
396
 function gnusocial_hourly_script {
514
     gnusocial_type=$1
397
     gnusocial_type=$1
515
     domain_name=$2
398
     domain_name=$2
900
     systemctl restart nginx
783
     systemctl restart nginx
901
 }
784
 }
902
 
785
 
903
-function gnusocial_use_armadillo {
904
-    database_name=$1
905
-
906
-    domain_name=$(get_completion_param "$database_name domain")
907
-
908
-    if [ ! -d /var/www/$domain_name/htdocs/armadillo ]; then
909
-        return
910
-    fi
911
-
912
-    if [ -f /var/www/$domain_name/htdocs/index.php ]; then
913
-        mv /var/www/$domain_name/htdocs/index.php /var/www/$domain_name/htdocs/index_qvitter.php
914
-    fi
915
-
916
-    if [ -f /etc/nginx/sites-available/$domain_name ]; then
917
-        sed -i 's|index.php|index_qvitter.php|g' /etc/nginx/sites-available/$domain_name
918
-        sed -i 's|index index_qvitter.php|index index.html|g' /etc/nginx/sites-available/$domain_name
919
-    fi
920
-
921
-    if grep -q "//addPlugin('Qvitter')" /var/www/$domain_name/htdocs/config.php; then
922
-        sed -i "s|//addPlugin('Qvitter')|addPlugin('Qvitter')|g" /var/www/$domain_name/htdocs/config.php
923
-    fi
924
-    if grep -q "// addPlugin('Qvitter')" /var/www/$domain_name/htdocs/config.php; then
925
-        sed -i "s|// addPlugin('Qvitter')|addPlugin('Qvitter')|g" /var/www/$domain_name/htdocs/config.php
926
-    fi
927
-
928
-    if [ -f $INSTALL_DIR/armadillo/armadillo/config.json ]; then
929
-        rm $INSTALL_DIR/armadillo/armadillo/config.json
930
-    fi
931
-    cp -r $INSTALL_DIR/armadillo/armadillo/* /var/www/${domain_name}/htdocs/armadillo
932
-    cp $INSTALL_DIR/armadillo/armadillo.html /var/www/${domain_name}/htdocs/index.html
933
-    cp $INSTALL_DIR/armadillo/dash.html /var/www/${domain_name}/htdocs/dash.html
934
-    chown -R www-data:www-data /var/www/${domain_name}/htdocs
935
-
936
-    systemctl restart nginx
937
-}
938
-
939
 function install_gnusocial_plugin_sharings {
786
 function install_gnusocial_plugin_sharings {
940
     domain_name=$1
787
     domain_name=$1
941
     social_app_name=$2
788
     social_app_name=$2

+ 10
- 6
src/freedombone-utils-nodejs View File

61
 }
61
 }
62
 
62
 
63
 function mesh_install_nodejs {
63
 function mesh_install_nodejs {
64
-    chroot "$rootdir" apt-get -yq install g++ m4 libtool automake nodejs curl
65
-    chroot "$rootdir" apt-get -yq install libxext-dev libxtst-dev libxkbfile-dev
64
+    mesh_install_nodejs_prefix=
65
+    if [ $rootdir ]; then
66
+        mesh_install_nodejs_prefix="chroot $rootdir"
67
+    fi
68
+    $mesh_install_nodejs_prefix apt-get -yq install g++ m4 libtool automake nodejs curl
69
+    $mesh_install_nodejs_prefix apt-get -yq install libxext-dev libxtst-dev libxkbfile-dev
66
 
70
 
67
     if [ ! -f ${rootdir}/usr/bin/nodejs ]; then
71
     if [ ! -f ${rootdir}/usr/bin/nodejs ]; then
68
         echo $'nodejs was not installed'
72
         echo $'nodejs was not installed'
83
         echo $'Unable to download npm installer'
87
         echo $'Unable to download npm installer'
84
         exit 8793636
88
         exit 8793636
85
     fi
89
     fi
86
-    chroot "$rootdir" chmod +x /root/npm_install.sh
90
+    $mesh_install_nodejs_prefix chmod +x /root/npm_install.sh
87
     sed -i "s|t=\"\${npm_install}\"|t=\"$NPM_VERSION\"|g" $rootdir/root/npm_install.sh
91
     sed -i "s|t=\"\${npm_install}\"|t=\"$NPM_VERSION\"|g" $rootdir/root/npm_install.sh
88
-    chroot "$rootdir" /root/npm_install.sh
92
+    $mesh_install_nodejs_prefix /root/npm_install.sh
89
 
93
 
90
     if [ ! -f $rootdir/usr/bin/npm ]; then
94
     if [ ! -f $rootdir/usr/bin/npm ]; then
91
         echo $'npm was not installed'
95
         echo $'npm was not installed'
95
 
99
 
96
     # update from the old debian nodejs version
100
     # update from the old debian nodejs version
97
     get_npm_arch
101
     get_npm_arch
98
-    chroot "$rootdir" npm install --arch=$NPM_ARCH -g n@${NODEJS_N_VERSION} --save
99
-    chroot "$rootdir" n --arch $N_ARCH ${NODEJS_VERSION}
102
+    $mesh_install_nodejs_prefix npm install --arch=$NPM_ARCH -g n@${NODEJS_N_VERSION} --save
103
+    $mesh_install_nodejs_prefix n --arch $N_ARCH ${NODEJS_VERSION}
100
     cp $rootdir/root/npm $rootdir/usr/bin/npm
104
     cp $rootdir/root/npm $rootdir/usr/bin/npm
101
 }
105
 }
102
 
106
 

+ 1
- 1
src/freedombone-utils-passwords View File

51
 }
51
 }
52
 
52
 
53
 function create_password {
53
 function create_password {
54
-    openssl rand -base64 32 | tr -dc A-Za-z0-9 | head -c ${1} ; echo ''
54
+    openssl rand -base64 32 | tr -dc A-Za-z0-9 | head -c ${1} ; echo -n ''
55
 }
55
 }
56
 
56
 
57
 # NOTE: deliberately no exit 0
57
 # NOTE: deliberately no exit 0

+ 398
- 0
website/EN/armbian.html View File

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
+<!-- 2017-09-20 Wed 20:03 -->
7
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
+<meta name="viewport" content="width=device-width, initial-scale=1" />
9
+<title>&lrm;</title>
10
+<meta name="generator" content="Org mode" />
11
+<meta name="author" content="Bob Mottram" />
12
+<meta name="description" content="Installing Freedombone on Armbian"
13
+ />
14
+<meta name="keywords" content="freedombox, debian, armbian" />
15
+<style type="text/css">
16
+ <!--/*--><![CDATA[/*><!--*/
17
+  .title  { text-align: center;
18
+             margin-bottom: .2em; }
19
+  .subtitle { text-align: center;
20
+              font-size: medium;
21
+              font-weight: bold;
22
+              margin-top:0; }
23
+  .todo   { font-family: monospace; color: red; }
24
+  .done   { font-family: monospace; color: green; }
25
+  .priority { font-family: monospace; color: orange; }
26
+  .tag    { background-color: #eee; font-family: monospace;
27
+            padding: 2px; font-size: 80%; font-weight: normal; }
28
+  .timestamp { color: #bebebe; }
29
+  .timestamp-kwd { color: #5f9ea0; }
30
+  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
31
+  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
32
+  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
33
+  .underline { text-decoration: underline; }
34
+  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
35
+  p.verse { margin-left: 3%; }
36
+  pre {
37
+    border: 1px solid #ccc;
38
+    box-shadow: 3px 3px 3px #eee;
39
+    padding: 8pt;
40
+    font-family: monospace;
41
+    overflow: auto;
42
+    margin: 1.2em;
43
+  }
44
+  pre.src {
45
+    position: relative;
46
+    overflow: visible;
47
+    padding-top: 1.2em;
48
+  }
49
+  pre.src:before {
50
+    display: none;
51
+    position: absolute;
52
+    background-color: white;
53
+    top: -10px;
54
+    right: 10px;
55
+    padding: 3px;
56
+    border: 1px solid black;
57
+  }
58
+  pre.src:hover:before { display: inline;}
59
+  /* Languages per Org manual */
60
+  pre.src-asymptote:before { content: 'Asymptote'; }
61
+  pre.src-awk:before { content: 'Awk'; }
62
+  pre.src-C:before { content: 'C'; }
63
+  /* pre.src-C++ doesn't work in CSS */
64
+  pre.src-clojure:before { content: 'Clojure'; }
65
+  pre.src-css:before { content: 'CSS'; }
66
+  pre.src-D:before { content: 'D'; }
67
+  pre.src-ditaa:before { content: 'ditaa'; }
68
+  pre.src-dot:before { content: 'Graphviz'; }
69
+  pre.src-calc:before { content: 'Emacs Calc'; }
70
+  pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
71
+  pre.src-fortran:before { content: 'Fortran'; }
72
+  pre.src-gnuplot:before { content: 'gnuplot'; }
73
+  pre.src-haskell:before { content: 'Haskell'; }
74
+  pre.src-hledger:before { content: 'hledger'; }
75
+  pre.src-java:before { content: 'Java'; }
76
+  pre.src-js:before { content: 'Javascript'; }
77
+  pre.src-latex:before { content: 'LaTeX'; }
78
+  pre.src-ledger:before { content: 'Ledger'; }
79
+  pre.src-lisp:before { content: 'Lisp'; }
80
+  pre.src-lilypond:before { content: 'Lilypond'; }
81
+  pre.src-lua:before { content: 'Lua'; }
82
+  pre.src-matlab:before { content: 'MATLAB'; }
83
+  pre.src-mscgen:before { content: 'Mscgen'; }
84
+  pre.src-ocaml:before { content: 'Objective Caml'; }
85
+  pre.src-octave:before { content: 'Octave'; }
86
+  pre.src-org:before { content: 'Org mode'; }
87
+  pre.src-oz:before { content: 'OZ'; }
88
+  pre.src-plantuml:before { content: 'Plantuml'; }
89
+  pre.src-processing:before { content: 'Processing.js'; }
90
+  pre.src-python:before { content: 'Python'; }
91
+  pre.src-R:before { content: 'R'; }
92
+  pre.src-ruby:before { content: 'Ruby'; }
93
+  pre.src-sass:before { content: 'Sass'; }
94
+  pre.src-scheme:before { content: 'Scheme'; }
95
+  pre.src-screen:before { content: 'Gnu Screen'; }
96
+  pre.src-sed:before { content: 'Sed'; }
97
+  pre.src-sh:before { content: 'shell'; }
98
+  pre.src-sql:before { content: 'SQL'; }
99
+  pre.src-sqlite:before { content: 'SQLite'; }
100
+  /* additional languages in org.el's org-babel-load-languages alist */
101
+  pre.src-forth:before { content: 'Forth'; }
102
+  pre.src-io:before { content: 'IO'; }
103
+  pre.src-J:before { content: 'J'; }
104
+  pre.src-makefile:before { content: 'Makefile'; }
105
+  pre.src-maxima:before { content: 'Maxima'; }
106
+  pre.src-perl:before { content: 'Perl'; }
107
+  pre.src-picolisp:before { content: 'Pico Lisp'; }
108
+  pre.src-scala:before { content: 'Scala'; }
109
+  pre.src-shell:before { content: 'Shell Script'; }
110
+  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
111
+  /* additional language identifiers per "defun org-babel-execute"
112
+       in ob-*.el */
113
+  pre.src-cpp:before  { content: 'C++'; }
114
+  pre.src-abc:before  { content: 'ABC'; }
115
+  pre.src-coq:before  { content: 'Coq'; }
116
+  pre.src-groovy:before  { content: 'Groovy'; }
117
+  /* additional language identifiers from org-babel-shell-names in
118
+     ob-shell.el: ob-shell is the only babel language using a lambda to put
119
+     the execution function name together. */
120
+  pre.src-bash:before  { content: 'bash'; }
121
+  pre.src-csh:before  { content: 'csh'; }
122
+  pre.src-ash:before  { content: 'ash'; }
123
+  pre.src-dash:before  { content: 'dash'; }
124
+  pre.src-ksh:before  { content: 'ksh'; }
125
+  pre.src-mksh:before  { content: 'mksh'; }
126
+  pre.src-posh:before  { content: 'posh'; }
127
+  /* Additional Emacs modes also supported by the LaTeX listings package */
128
+  pre.src-ada:before { content: 'Ada'; }
129
+  pre.src-asm:before { content: 'Assembler'; }
130
+  pre.src-caml:before { content: 'Caml'; }
131
+  pre.src-delphi:before { content: 'Delphi'; }
132
+  pre.src-html:before { content: 'HTML'; }
133
+  pre.src-idl:before { content: 'IDL'; }
134
+  pre.src-mercury:before { content: 'Mercury'; }
135
+  pre.src-metapost:before { content: 'MetaPost'; }
136
+  pre.src-modula-2:before { content: 'Modula-2'; }
137
+  pre.src-pascal:before { content: 'Pascal'; }
138
+  pre.src-ps:before { content: 'PostScript'; }
139
+  pre.src-prolog:before { content: 'Prolog'; }
140
+  pre.src-simula:before { content: 'Simula'; }
141
+  pre.src-tcl:before { content: 'tcl'; }
142
+  pre.src-tex:before { content: 'TeX'; }
143
+  pre.src-plain-tex:before { content: 'Plain TeX'; }
144
+  pre.src-verilog:before { content: 'Verilog'; }
145
+  pre.src-vhdl:before { content: 'VHDL'; }
146
+  pre.src-xml:before { content: 'XML'; }
147
+  pre.src-nxml:before { content: 'XML'; }
148
+  /* add a generic configuration mode; LaTeX export needs an additional
149
+     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
150
+  pre.src-conf:before { content: 'Configuration File'; }
151
+
152
+  table { border-collapse:collapse; }
153
+  caption.t-above { caption-side: top; }
154
+  caption.t-bottom { caption-side: bottom; }
155
+  td, th { vertical-align:top;  }
156
+  th.org-right  { text-align: center;  }
157
+  th.org-left   { text-align: center;   }
158
+  th.org-center { text-align: center; }
159
+  td.org-right  { text-align: right;  }
160
+  td.org-left   { text-align: left;   }
161
+  td.org-center { text-align: center; }
162
+  dt { font-weight: bold; }
163
+  .footpara { display: inline; }
164
+  .footdef  { margin-bottom: 1em; }
165
+  .figure { padding: 1em; }
166
+  .figure p { text-align: center; }
167
+  .inlinetask {
168
+    padding: 10px;
169
+    border: 2px solid gray;
170
+    margin: 10px;
171
+    background: #ffffcc;
172
+  }
173
+  #org-div-home-and-up
174
+   { text-align: right; font-size: 70%; white-space: nowrap; }
175
+  textarea { overflow-x: auto; }
176
+  .linenr { font-size: smaller }
177
+  .code-highlighted { background-color: #ffff00; }
178
+  .org-info-js_info-navigation { border-style: none; }
179
+  #org-info-js_console-label
180
+    { font-size: 10px; font-weight: bold; white-space: nowrap; }
181
+  .org-info-js_search-highlight
182
+    { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
184
+  /*]]>*/-->
185
+</style>
186
+<link rel="stylesheet" type="text/css" href="freedombone.css" />
187
+<script type="text/javascript">
188
+/*
189
+@licstart  The following is the entire license notice for the
190
+JavaScript code in this tag.
191
+
192
+Copyright (C) 2012-2017 Free Software Foundation, Inc.
193
+
194
+The JavaScript code in this tag is free software: you can
195
+redistribute it and/or modify it under the terms of the GNU
196
+General Public License (GNU GPL) as published by the Free Software
197
+Foundation, either version 3 of the License, or (at your option)
198
+any later version.  The code is distributed WITHOUT ANY WARRANTY;
199
+without even the implied warranty of MERCHANTABILITY or FITNESS
200
+FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
201
+
202
+As additional permission under GNU GPL version 3 section 7, you
203
+may distribute non-source (e.g., minimized or compacted) forms of
204
+that code without the copy of the GNU GPL normally required by
205
+section 4, provided you include this license notice and a URL
206
+through which recipients can access the Corresponding Source.
207
+
208
+
209
+@licend  The above is the entire license notice
210
+for the JavaScript code in this tag.
211
+*/
212
+<!--/*--><![CDATA[/*><!--*/
213
+ function CodeHighlightOn(elem, id)
214
+ {
215
+   var target = document.getElementById(id);
216
+   if(null != target) {
217
+     elem.cacheClassElem = elem.className;
218
+     elem.cacheClassTarget = target.className;
219
+     target.className = "code-highlighted";
220
+     elem.className   = "code-highlighted";
221
+   }
222
+ }
223
+ function CodeHighlightOff(elem, id)
224
+ {
225
+   var target = document.getElementById(id);
226
+   if(elem.cacheClassElem)
227
+     elem.className = elem.cacheClassElem;
228
+   if(elem.cacheClassTarget)
229
+     target.className = elem.cacheClassTarget;
230
+ }
231
+/*]]>*///-->
232
+</script>
233
+</head>
234
+<body>
235
+<div id="preamble" class="status">
236
+<a name="top" id="top"></a>
237
+</div>
238
+<div id="content">
239
+<div class="org-center">
240
+
241
+<div class="figure">
242
+<p><img src="images/logo.png" alt="logo.png" />
243
+</p>
244
+</div>
245
+</div>
246
+
247
+
248
+<center><h1>Installing on Armbian</h1></center>
249
+
250
+<p>
251
+If you have a single board ARM computer which isn't one of the supported ones then you can probably still install Freedombone onto it if it has a <a href="https://www.armbian.com/download/">Debian Stretch Armbian image</a> available for it.
252
+</p>
253
+
254
+<p>
255
+Download the Armbian image for your board. It must be version 9 (Stretch), otherwise it won't work. Extract the image from its archive, then copy it to a microSD card:
256
+</p>
257
+
258
+<div class="org-src-container">
259
+<pre class="src src-bash">sudo dd <span class="org-variable-name">if</span>=[Armbian .img file] <span class="org-variable-name">of</span>=/dev/sdX
260
+</pre>
261
+</div>
262
+
263
+<p>
264
+Where <b>/dev/sdX</b> is the path for the microSD drive on your system.
265
+</p>
266
+
267
+<p>
268
+When that's done use a tool such as <b>Gparted</b> to resize the partition on the microSD card to fill up any remaining available space.
269
+</p>
270
+
271
+<p>
272
+Insert the microSD drive into your ARM board, connect it to your internet router with an ethernet cable and plug in the power.
273
+</p>
274
+
275
+<p>
276
+The board should then show up somewhere on your local network. You can log into your internet router to see what devices are connected and obtain the local IP address for the board that way, or use a network scanning tool.
277
+</p>
278
+
279
+<p>
280
+Once you know the local IP address of your ARM board then you can log into it with:
281
+</p>
282
+
283
+<div class="org-src-container">
284
+<pre class="src src-bash">ssh root@[local IP address]
285
+</pre>
286
+</div>
287
+
288
+<p>
289
+Using the default Armbian password of <b>1234</b>. You should see the Armbian welcome message and will be asked to change the password, then create a new user account.
290
+</p>
291
+
292
+<div class="org-center">
293
+
294
+<div class="figure">
295
+<p><img src="images/armbian_setup.jpg" alt="armbian_setup.jpg" />
296
+</p>
297
+</div>
298
+</div>
299
+
300
+<p>
301
+When the user account is created type <b>exit</b> to leave the ssh session then log back in with your new user account.
302
+</p>
303
+
304
+<div class="org-src-container">
305
+<pre class="src src-bash">ssh myusername@[local IP address]
306
+</pre>
307
+</div>
308
+
309
+<p>
310
+Become the root user:
311
+</p>
312
+
313
+<div class="org-src-container">
314
+<pre class="src src-bash">sudo su
315
+</pre>
316
+</div>
317
+
318
+<p>
319
+Then clone the Freedombone repository and checkout the stretch development branch.
320
+</p>
321
+
322
+<div class="org-src-container">
323
+<pre class="src src-bash">git clone https://github.com/bashrc/freedombone
324
+<span class="org-builtin">cd</span> freedombone
325
+git checkout stretch
326
+</pre>
327
+</div>
328
+
329
+<p>
330
+Install the Freedombone commands:
331
+</p>
332
+
333
+<div class="org-src-container">
334
+<pre class="src src-bash">make install
335
+</pre>
336
+</div>
337
+
338
+<p>
339
+And now you can begin installing the Freedombone system. There are two ways of doing this. If you already own a domain name which you want to use then run:
340
+</p>
341
+
342
+<div class="org-src-container">
343
+<pre class="src src-bash">freedombone menuconfig
344
+</pre>
345
+</div>
346
+
347
+<p>
348
+Alternatively, if you don't own a domain name, don't have administrator access to your internet router or if you want to be able to access your sites only via onion addresses then run:
349
+</p>
350
+
351
+<div class="org-src-container">
352
+<pre class="src src-bash">freedombone menuconfig-onion
353
+</pre>
354
+</div>
355
+
356
+<p>
357
+You will then be taken through a few questions and the system will install. Afterwards you'll be able to log into your system with:
358
+</p>
359
+
360
+<div class="org-src-container">
361
+<pre class="src src-bash">ssh myusername@freedombone.local -p 2222
362
+</pre>
363
+</div>
364
+
365
+<p>
366
+Then select <b>Administrator options</b>. If you chose the first install option using a domain name then go to <b>Show Firewall</b> and make sure that the ports shown are forwarded from your internet router to your ARM board.
367
+</p>
368
+
369
+<p>
370
+You can then <a href="./apps.html">add or remove apps</a> as needed.
371
+</p>
372
+</div>
373
+<div id="postamble" class="status">
374
+
375
+<style type="text/css">
376
+.back-to-top {
377
+    position: fixed;
378
+    bottom: 2em;
379
+    right: 0px;
380
+    text-decoration: none;
381
+    color: #000000;
382
+    background-color: rgba(235, 235, 235, 0.80);
383
+    font-size: 12px;
384
+    padding: 1em;
385
+    display: none;
386
+}
387
+
388
+.back-to-top:hover {
389
+    background-color: rgba(135, 135, 135, 0.50);
390
+}
391
+</style>
392
+
393
+<div class="back-to-top">
394
+<a href="#top">Back to top</a> | <a href="mailto:bob@freedombone.net">E-mail me</a>
395
+</div>
396
+</div>
397
+</body>
398
+</html>

+ 6
- 2
website/EN/index.html View File

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
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">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
5
 <head>
6
-<!-- 2017-07-20 Thu 14:24 -->
6
+<!-- 2017-09-20 Wed 19:14 -->
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9
-<title></title>
9
+<title>&lrm;</title>
10
 <meta name="generator" content="Org mode" />
10
 <meta name="generator" content="Org mode" />
11
 <meta name="author" content="Bob Mottram" />
11
 <meta name="author" content="Bob Mottram" />
12
 <meta name="description" content="Turn the Beaglebone Black into a personal communications server"
12
 <meta name="description" content="Turn the Beaglebone Black into a personal communications server"
276
 </p>
276
 </p>
277
 
277
 
278
 <p>
278
 <p>
279
+If you have a single board ARM computer which isn't one of the officially supported ones, such as Raspberry Pi, then you may still be able to install <a href="./armbian.html">Freedombone with Armbian</a>.
280
+</p>
281
+
282
+<p>
279
 Want to make a community mesh network which doesn't depend upon the internet? The <a href="./mesh.html">Freedombone Mesh</a> is a wireless solution for autonomous communication that can be rapidly deployed in temporary, emergency or post-disaster situations where internet access is unavailable or compromised.
283
 Want to make a community mesh network which doesn't depend upon the internet? The <a href="./mesh.html">Freedombone Mesh</a> is a wireless solution for autonomous communication that can be rapidly deployed in temporary, emergency or post-disaster situations where internet access is unavailable or compromised.
280
 </p>
284
 </p>
281
 
285