This commit is contained in:
Bob Mottram 2017-09-21 11:06:23 +01:00
commit 28711ca1e5
12 changed files with 523 additions and 173 deletions

92
doc/EN/armbian.org Normal file
View File

@ -0,0 +1,92 @@
#+TITLE:
#+AUTHOR: Bob Mottram
#+EMAIL: bob@freedombone.net
#+KEYWORDS: freedombox, debian, armbian
#+DESCRIPTION: Installing Freedombone on Armbian
#+OPTIONS: ^:nil toc:nil
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="freedombone.css" />
#+BEGIN_CENTER
[[file:images/logo.png]]
#+END_CENTER
#+begin_export html
<center><h1>Installing on Armbian</h1></center>
#+end_export
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.
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:
#+begin_src bash
sudo dd if=[Armbian .img file] of=/dev/sdX
#+end_src
Where */dev/sdX* is the path for the microSD drive on your system.
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.
Insert the microSD drive into your ARM board, connect it to your internet router with an ethernet cable and plug in the power.
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.
Once you know the local IP address of your ARM board then you can log into it with:
#+begin_src bash
ssh root@[local IP address]
#+end_src
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.
#+BEGIN_CENTER
[[file:images/armbian_setup.jpg]]
#+END_CENTER
When the user account is created type *exit* to leave the ssh session then log back in with your new user account.
#+begin_src bash
ssh myusername@[local IP address]
#+end_src
Become the root user:
#+begin_src bash
sudo su
#+end_src
Then clone the Freedombone repository and checkout the stretch development branch.
#+begin_src bash
git clone https://github.com/bashrc/freedombone
cd freedombone
git checkout stretch
#+end_src
Install the Freedombone commands:
#+begin_src bash
make install
#+end_src
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:
#+begin_src bash
freedombone menuconfig
#+end_src
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:
#+begin_src bash
freedombone menuconfig-onion
#+end_src
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:
#+begin_src bash
ssh myusername@freedombone.local -p 2222
#+end_src
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.
You can then [[./apps.html][add or remove apps]] as needed.

View File

@ -31,6 +31,8 @@ And here's how [[./beaglebone.html][on a Beaglebone Black]].
Or you can install [[./debianinstall.html][onto an existing Debian system]]. Or you can install [[./debianinstall.html][onto an existing Debian system]].
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]].
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. 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.
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. 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 Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

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

View File

@ -295,10 +295,12 @@ function install_mediagoblin {
function_check install_nodejs function_check install_nodejs
install_nodejs mediagoblin install_nodejs mediagoblin
apt-get install -yq python python-dev python-lxml python-imaging python-virtualenv apt-get install -yq python python-dev python-lxml python-imaging python-virtualenv python-setuptools
apt-get install -yq automake perl sqlite python-paste python-pastedeploy python-pastescript apt-get install -yq automake perl sqlite python-paste python-pastedeploy python-pastescript
apt-get install -yq python3 python3-dev libpython3-dev python3-lxml python3-pil apt-get install -yq python3 python3-dev libpython3-dev python3-lxml python3-pil
groupadd mediagoblin groupadd mediagoblin
apt-get install -yq python-service-identity python-ndg-httpsclient
useradd -c "GNU MediaGoblin system account" -d /var/lib/mediagoblin -m -r -g www-data mediagoblin useradd -c "GNU MediaGoblin system account" -d /var/lib/mediagoblin -m -r -g www-data mediagoblin
usermod --append -G mediagoblin mediagoblin usermod --append -G mediagoblin mediagoblin
mkdir -p /var/lib/mediagoblin mkdir -p /var/lib/mediagoblin

View File

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

View File

@ -828,7 +828,8 @@ function install_searx {
apt-get -yq install python-pip libyaml-dev python-werkzeug python-babel python-lxml apt-get -yq install python-pip libyaml-dev python-werkzeug python-babel python-lxml
apt-get -yq install git build-essential libxslt-dev python-dev python-virtualenv zlib1g-dev uwsgi uwsgi-plugin-python imagemagick apt-get -yq install git build-essential libxslt-dev python-dev python-virtualenv zlib1g-dev uwsgi uwsgi-plugin-python imagemagick
apt-get -yq install apache2-utils apt-get -yq install apache2-utils python-setuptools
apt-get -yq install python-service-identity python-ndg-httpsclient
apt-get -yq remove --purge apache2-bin* apt-get -yq remove --purge apache2-bin*
if [ -d /etc/apache2 ]; then if [ -d /etc/apache2 ]; then

View File

@ -29,15 +29,12 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# Qvitter upstream: https://git.gnu.io/h2p/Qvitter" # Qvitter upstream: https://git.gnu.io/h2p/Qvitter"
QVITTER_THEME_REPO="https://git.postactiv.com/bob/Qvitter" QVITTER_THEME_REPO="https://github.com/bashrc/Qvitter"
QVITTER_THEME_COMMIT='b5791cf935a6391c492cefa1ffa50cc3cea44c12' QVITTER_THEME_COMMIT='c6f09bda4e45be4290cf7409fa5efb4420538032'
PLEROMA_REPO="https://gitgud.io/lambadalambda/pleroma-fe" PLEROMA_REPO="https://gitgud.io/lambadalambda/pleroma-fe"
PLEROMA_COMMIT='cbe652f2d94d81fa54a37378b7ff014c4391ca5e' PLEROMA_COMMIT='cbe652f2d94d81fa54a37378b7ff014c4391ca5e'
ARMADILLO_REPO="https://git.postactiv.com/maiya/Armadillo"
ARMADILLO_COMMIT='ec3938a678f373156c4cbf37926c9a5ab68222c4'
SHARINGS_REPO="http://git.lasindias.club/bashrc/Sharings" SHARINGS_REPO="http://git.lasindias.club/bashrc/Sharings"
SHARINGS_COMMIT='d5c6c7f855d9afff9086c09ea706f38c859bc0d4' SHARINGS_COMMIT='d5c6c7f855d9afff9086c09ea706f38c859bc0d4'
SHARINGS_THEME_REPO="http://git.lasindias.club/manuel/SharingsTheme" SHARINGS_THEME_REPO="http://git.lasindias.club/manuel/SharingsTheme"
@ -163,62 +160,6 @@ function pleroma_set_background_image_from_url {
echo "0" echo "0"
} }
function armadillo_set_background_image_from_url {
domain_name="$1"
url="$2"
if [ ${#domain_name} -eq 0 ]; then
echo "1"
return
fi
ext=
if [ ${#url} -gt 0 ]; then
if [[ "$url" == *".jpeg" || "$url" == *".jpg" ]]; then
ext="jpg"
fi
if [[ "$url" == *".png" ]]; then
ext="png"
fi
if [[ "$url" == *".gif" ]]; then
ext="gif"
fi
fi
if [ ${#ext} -gt 0 ]; then
cd /var/www/${domain_name}/htdocs
# remove any existing image
if [ -f bg_custom.${ext} ]; then
rm bg_custom.${ext}
fi
# get the new image
wget "$url" -O bg_custom.${ext}
if [ ! -f bg_custom.${ext} ]; then
echo "$url"
echo $'Custom background image for armadillo could not be downloaded'
echo "1"
return
fi
if [ -d /var/www/${domain_name}/htdocs/armadillo ]; then
cd /var/www/${domain_name}/htdocs/armadillo
cp ../bg_custom.${ext} media/img/bg_custom.${ext}
sed -i "s|\"background\":.*|\"background\": \"armadillo/media/img/background.jpeg\"," config.json
fi
qvitter_update_background ${domain_name} ${ext}
rm bg_custom.${ext}
else
echo "2"
return
fi
echo "0"
}
function install_qvitter { function install_qvitter {
domain_name=$1 domain_name=$1
app_name=$2 app_name=$2
@ -260,6 +201,11 @@ function install_qvitter {
git_clone $QVITTER_THEME_REPO Qvitter git_clone $QVITTER_THEME_REPO Qvitter
fi fi
if [ ! -d /var/www/${domain_name}/htdocs/local/plugins/Qvitter ]; then
echo $'Qvitter repo was not installed'
exit 835638
fi
cd /var/www/${domain_name}/htdocs/local/plugins/Qvitter cd /var/www/${domain_name}/htdocs/local/plugins/Qvitter
git checkout $QVITTER_THEME_COMMIT -b $QVITTER_THEME_COMMIT git checkout $QVITTER_THEME_COMMIT -b $QVITTER_THEME_COMMIT
@ -329,48 +275,6 @@ function install_gnusocial_default_background {
fi fi
} }
function install_armadillo_front_end {
app_name="$1"
armadillo_domain="$2"
background_url="$3"
if [ ! -d $INSTALL_DIR/armadillo ]; then
function_check git_clone
git_clone $ARMADILLO_REPO $INSTALL_DIR/armadillo
if [ ! -d $INSTALL_DIR/armadillo ]; then
echo $'Unable to clone armadillo repo'
exit 35722
fi
fi
cd $INSTALL_DIR/armadillo
git checkout $ARMADILLO_COMMIT -b $ARMADILLO_COMMIT
set_completion_param "${app_name} armadillo commit" "$ARMADILLO_COMMIT"
cp armadillo/config.json.example armadillo/config.json
if [[ $ONION_ONLY == 'no' ]]; then
sed -i "s|\"server\".*|\"server\": \"https://${armadillo_domain}\",|g" armadillo/config.json
else
sed -i "s|\"server\".*|\"server\": \"http://${armadillo_domain}\",|g" armadillo/config.json
fi
owner='<a href=\\"'"https://${armadillo_domain}/$MY_USERNAME"'\\">@'"$MY_USERNAME@${armadillo_domain}"'</a>'
sed -i "s|\"owner\".*|\"owner\": \"$owner\",|g" armadillo/config.json
cp -r $INSTALL_DIR/armadillo/armadillo /var/www/${armadillo_domain}/htdocs/
cp $INSTALL_DIR/armadillo/armadillo.html /var/www/${armadillo_domain}/htdocs/index.html
cp $INSTALL_DIR/armadillo/dash.html /var/www/${armadillo_domain}/htdocs/dash.html
armadillo_set_background_image_from_url "$armadillo_domain" "$background_url"
nginx_site=/etc/nginx/sites-available/${armadillo_domain}
sed -i 's|index index.php;|index index.html;|g' $nginx_site
if [ -f /var/www/${armadillo_domain}/htdocs/index.php ]; then
mv /var/www/${armadillo_domain}/htdocs/index.php /var/www/${armadillo_domain}/htdocs/index_qvitter.php
fi
sed -i 's|index.php|index_qvitter.php|g' $nginx_site
chown -R www-data:www-data /var/www/${armadillo_domain}/htdocs
}
function install_pleroma_front_end { function install_pleroma_front_end {
app_name="$1" app_name="$1"
@ -489,27 +393,6 @@ function upgrade_pleroma {
fi fi
} }
function upgrade_armadillo {
domain_name="$1"
app_name="$2"
background_url="$3"
if [ -d $INSTALL_DIR/armadillo ]; then
set_repo_commit $INSTALL_DIR/armadillo "${app_name} armadillo commit" "$ARMADILLO_COMMIT" $ARMADILLO_REPO
cd $INSTALL_DIR/armadillo
if [ -f $INSTALL_DIR/armadillo/armadillo/config.json ]; then
rm $INSTALL_DIR/armadillo/armadillo/config.json
fi
cp -r $INSTALL_DIR/armadillo/armadillo /var/www/${armadillo_domain}/htdocs/
cp $INSTALL_DIR/armadillo/armadillo.html /var/www/${armadillo_domain}/htdocs/index.html
cp $INSTALL_DIR/armadillo/dash.html /var/www/${armadillo_domain}/htdocs/dash.html
chown -R www-data:www-data /var/www/${domain_name}/htdocs
else
install_armadillo_front_end "${app_name}" "${domain_name}" "${background_url}"
fi
}
function gnusocial_hourly_script { function gnusocial_hourly_script {
gnusocial_type=$1 gnusocial_type=$1
domain_name=$2 domain_name=$2
@ -900,42 +783,6 @@ function gnusocial_use_pleroma {
systemctl restart nginx systemctl restart nginx
} }
function gnusocial_use_armadillo {
database_name=$1
domain_name=$(get_completion_param "$database_name domain")
if [ ! -d /var/www/$domain_name/htdocs/armadillo ]; then
return
fi
if [ -f /var/www/$domain_name/htdocs/index.php ]; then
mv /var/www/$domain_name/htdocs/index.php /var/www/$domain_name/htdocs/index_qvitter.php
fi
if [ -f /etc/nginx/sites-available/$domain_name ]; then
sed -i 's|index.php|index_qvitter.php|g' /etc/nginx/sites-available/$domain_name
sed -i 's|index index_qvitter.php|index index.html|g' /etc/nginx/sites-available/$domain_name
fi
if grep -q "//addPlugin('Qvitter')" /var/www/$domain_name/htdocs/config.php; then
sed -i "s|//addPlugin('Qvitter')|addPlugin('Qvitter')|g" /var/www/$domain_name/htdocs/config.php
fi
if grep -q "// addPlugin('Qvitter')" /var/www/$domain_name/htdocs/config.php; then
sed -i "s|// addPlugin('Qvitter')|addPlugin('Qvitter')|g" /var/www/$domain_name/htdocs/config.php
fi
if [ -f $INSTALL_DIR/armadillo/armadillo/config.json ]; then
rm $INSTALL_DIR/armadillo/armadillo/config.json
fi
cp -r $INSTALL_DIR/armadillo/armadillo/* /var/www/${domain_name}/htdocs/armadillo
cp $INSTALL_DIR/armadillo/armadillo.html /var/www/${domain_name}/htdocs/index.html
cp $INSTALL_DIR/armadillo/dash.html /var/www/${domain_name}/htdocs/dash.html
chown -R www-data:www-data /var/www/${domain_name}/htdocs
systemctl restart nginx
}
function install_gnusocial_plugin_sharings { function install_gnusocial_plugin_sharings {
domain_name=$1 domain_name=$1
social_app_name=$2 social_app_name=$2

View File

@ -61,8 +61,12 @@ function get_npm_arch {
} }
function mesh_install_nodejs { function mesh_install_nodejs {
chroot "$rootdir" apt-get -yq install g++ m4 libtool automake nodejs curl mesh_install_nodejs_prefix=
chroot "$rootdir" apt-get -yq install libxext-dev libxtst-dev libxkbfile-dev if [ $rootdir ]; then
mesh_install_nodejs_prefix="chroot $rootdir"
fi
$mesh_install_nodejs_prefix apt-get -yq install g++ m4 libtool automake nodejs curl
$mesh_install_nodejs_prefix apt-get -yq install libxext-dev libxtst-dev libxkbfile-dev
if [ ! -f ${rootdir}/usr/bin/nodejs ]; then if [ ! -f ${rootdir}/usr/bin/nodejs ]; then
echo $'nodejs was not installed' echo $'nodejs was not installed'
@ -83,9 +87,9 @@ function mesh_install_nodejs {
echo $'Unable to download npm installer' echo $'Unable to download npm installer'
exit 8793636 exit 8793636
fi fi
chroot "$rootdir" chmod +x /root/npm_install.sh $mesh_install_nodejs_prefix chmod +x /root/npm_install.sh
sed -i "s|t=\"\${npm_install}\"|t=\"$NPM_VERSION\"|g" $rootdir/root/npm_install.sh sed -i "s|t=\"\${npm_install}\"|t=\"$NPM_VERSION\"|g" $rootdir/root/npm_install.sh
chroot "$rootdir" /root/npm_install.sh $mesh_install_nodejs_prefix /root/npm_install.sh
if [ ! -f $rootdir/usr/bin/npm ]; then if [ ! -f $rootdir/usr/bin/npm ]; then
echo $'npm was not installed' echo $'npm was not installed'
@ -95,8 +99,8 @@ function mesh_install_nodejs {
# update from the old debian nodejs version # update from the old debian nodejs version
get_npm_arch get_npm_arch
chroot "$rootdir" npm install --arch=$NPM_ARCH -g n@${NODEJS_N_VERSION} --save $mesh_install_nodejs_prefix npm install --arch=$NPM_ARCH -g n@${NODEJS_N_VERSION} --save
chroot "$rootdir" n --arch $N_ARCH ${NODEJS_VERSION} $mesh_install_nodejs_prefix n --arch $N_ARCH ${NODEJS_VERSION}
cp $rootdir/root/npm $rootdir/usr/bin/npm cp $rootdir/root/npm $rootdir/usr/bin/npm
} }

View File

@ -51,7 +51,7 @@ function enforce_good_passwords {
} }
function create_password { function create_password {
openssl rand -base64 32 | tr -dc A-Za-z0-9 | head -c ${1} ; echo '' openssl rand -base64 32 | tr -dc A-Za-z0-9 | head -c ${1} ; echo -n ''
} }
# NOTE: deliberately no exit 0 # NOTE: deliberately no exit 0

398
website/EN/armbian.html Normal file
View File

@ -0,0 +1,398 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2017-09-20 Wed 20:03 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>&lrm;</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Bob Mottram" />
<meta name="description" content="Installing Freedombone on Armbian"
/>
<meta name="keywords" content="freedombox, debian, armbian" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<link rel="stylesheet" type="text/css" href="freedombone.css" />
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2017 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
</script>
</head>
<body>
<div id="preamble" class="status">
<a name="top" id="top"></a>
</div>
<div id="content">
<div class="org-center">
<div class="figure">
<p><img src="images/logo.png" alt="logo.png" />
</p>
</div>
</div>
<center><h1>Installing on Armbian</h1></center>
<p>
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.
</p>
<p>
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:
</p>
<div class="org-src-container">
<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
</pre>
</div>
<p>
Where <b>/dev/sdX</b> is the path for the microSD drive on your system.
</p>
<p>
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.
</p>
<p>
Insert the microSD drive into your ARM board, connect it to your internet router with an ethernet cable and plug in the power.
</p>
<p>
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.
</p>
<p>
Once you know the local IP address of your ARM board then you can log into it with:
</p>
<div class="org-src-container">
<pre class="src src-bash">ssh root@[local IP address]
</pre>
</div>
<p>
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.
</p>
<div class="org-center">
<div class="figure">
<p><img src="images/armbian_setup.jpg" alt="armbian_setup.jpg" />
</p>
</div>
</div>
<p>
When the user account is created type <b>exit</b> to leave the ssh session then log back in with your new user account.
</p>
<div class="org-src-container">
<pre class="src src-bash">ssh myusername@[local IP address]
</pre>
</div>
<p>
Become the root user:
</p>
<div class="org-src-container">
<pre class="src src-bash">sudo su
</pre>
</div>
<p>
Then clone the Freedombone repository and checkout the stretch development branch.
</p>
<div class="org-src-container">
<pre class="src src-bash">git clone https://github.com/bashrc/freedombone
<span class="org-builtin">cd</span> freedombone
git checkout stretch
</pre>
</div>
<p>
Install the Freedombone commands:
</p>
<div class="org-src-container">
<pre class="src src-bash">make install
</pre>
</div>
<p>
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:
</p>
<div class="org-src-container">
<pre class="src src-bash">freedombone menuconfig
</pre>
</div>
<p>
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:
</p>
<div class="org-src-container">
<pre class="src src-bash">freedombone menuconfig-onion
</pre>
</div>
<p>
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:
</p>
<div class="org-src-container">
<pre class="src src-bash">ssh myusername@freedombone.local -p 2222
</pre>
</div>
<p>
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.
</p>
<p>
You can then <a href="./apps.html">add or remove apps</a> as needed.
</p>
</div>
<div id="postamble" class="status">
<style type="text/css">
.back-to-top {
position: fixed;
bottom: 2em;
right: 0px;
text-decoration: none;
color: #000000;
background-color: rgba(235, 235, 235, 0.80);
font-size: 12px;
padding: 1em;
display: none;
}
.back-to-top:hover {
background-color: rgba(135, 135, 135, 0.50);
}
</style>
<div class="back-to-top">
<a href="#top">Back to top</a> | <a href="mailto:bob@freedombone.net">E-mail me</a>
</div>
</div>
</body>
</html>

View File

@ -3,10 +3,10 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2017-07-20 Thu 14:24 --> <!-- 2017-09-20 Wed 19:14 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title></title> <title>&lrm;</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
<meta name="author" content="Bob Mottram" /> <meta name="author" content="Bob Mottram" />
<meta name="description" content="Turn the Beaglebone Black into a personal communications server" <meta name="description" content="Turn the Beaglebone Black into a personal communications server"
@ -275,6 +275,10 @@ And here's how <a href="./beaglebone.html">on a Beaglebone Black</a>.
Or you can install <a href="./debianinstall.html">onto an existing Debian system</a>. Or you can install <a href="./debianinstall.html">onto an existing Debian system</a>.
</p> </p>
<p>
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>.
</p>
<p> <p>
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. 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.
</p> </p>