From 95d12e138455bfcd01d3a18bef2803d9f335fead Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 19 Sep 2017 11:03:45 +0100 Subject: [PATCH 01/11] Optional chroot when installing nodejs --- src/freedombone-utils-nodejs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/freedombone-utils-nodejs b/src/freedombone-utils-nodejs index 545e9269..e715ead9 100755 --- a/src/freedombone-utils-nodejs +++ b/src/freedombone-utils-nodejs @@ -61,8 +61,12 @@ function get_npm_arch { } function mesh_install_nodejs { - chroot "$rootdir" apt-get -yq install g++ m4 libtool automake nodejs curl - chroot "$rootdir" apt-get -yq install libxext-dev libxtst-dev libxkbfile-dev + mesh_install_nodejs_prefix= + 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 echo $'nodejs was not installed' @@ -83,9 +87,9 @@ function mesh_install_nodejs { echo $'Unable to download npm installer' exit 8793636 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 - chroot "$rootdir" /root/npm_install.sh + $mesh_install_nodejs_prefix /root/npm_install.sh if [ ! -f $rootdir/usr/bin/npm ]; then echo $'npm was not installed' @@ -95,8 +99,8 @@ function mesh_install_nodejs { # update from the old debian nodejs version get_npm_arch - chroot "$rootdir" npm install --arch=$NPM_ARCH -g n@${NODEJS_N_VERSION} --save - chroot "$rootdir" n --arch $N_ARCH ${NODEJS_VERSION} + $mesh_install_nodejs_prefix npm install --arch=$NPM_ARCH -g n@${NODEJS_N_VERSION} --save + $mesh_install_nodejs_prefix n --arch $N_ARCH ${NODEJS_VERSION} cp $rootdir/root/npm $rootdir/usr/bin/npm } From 919e4b49e6c9031e95444133e6ca43be63d2ea7a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 19 Sep 2017 19:46:38 +0100 Subject: [PATCH 02/11] Don't try to install pleroma on 64bit arm --- src/freedombone-app-gnusocial | 2 +- src/freedombone-app-postactiv | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/freedombone-app-gnusocial b/src/freedombone-app-gnusocial index 2d51c5ed..08fd5244 100755 --- a/src/freedombone-app-gnusocial +++ b/src/freedombone-app-gnusocial @@ -903,7 +903,7 @@ function install_gnusocial { # Currently Pleroma won't install on ARM systems # 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 $'architecture, so it will not be installed' else diff --git a/src/freedombone-app-postactiv b/src/freedombone-app-postactiv index 57c06889..86bb8736 100755 --- a/src/freedombone-app-postactiv +++ b/src/freedombone-app-postactiv @@ -921,7 +921,7 @@ function install_postactiv { # Currently Pleroma won't install on ARM systems # 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 $'architecture, so it will not be installed' else From 446e05239e2a50b92a2f8ef30a51efc9763866cb Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 19 Sep 2017 20:41:41 +0100 Subject: [PATCH 03/11] Check that qvitter repo was installed --- src/freedombone-utils-gnusocialtools | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/freedombone-utils-gnusocialtools b/src/freedombone-utils-gnusocialtools index ede2d653..a7db416f 100755 --- a/src/freedombone-utils-gnusocialtools +++ b/src/freedombone-utils-gnusocialtools @@ -260,6 +260,11 @@ function install_qvitter { git_clone $QVITTER_THEME_REPO Qvitter 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 git checkout $QVITTER_THEME_COMMIT -b $QVITTER_THEME_COMMIT From 56b5bd42d3486b471d383f447964add2a481ab80 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 20 Sep 2017 14:42:37 +0100 Subject: [PATCH 04/11] Switch to the backup repo for Qvitter --- src/freedombone-utils-gnusocialtools | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/freedombone-utils-gnusocialtools b/src/freedombone-utils-gnusocialtools index a7db416f..3e45bca5 100755 --- a/src/freedombone-utils-gnusocialtools +++ b/src/freedombone-utils-gnusocialtools @@ -29,8 +29,8 @@ # along with this program. If not, see . # Qvitter upstream: https://git.gnu.io/h2p/Qvitter" -QVITTER_THEME_REPO="https://git.postactiv.com/bob/Qvitter" -QVITTER_THEME_COMMIT='b5791cf935a6391c492cefa1ffa50cc3cea44c12' +QVITTER_THEME_REPO="https://github/bashrc/Qvitter" +QVITTER_THEME_COMMIT='c6f09bda4e45be4290cf7409fa5efb4420538032' PLEROMA_REPO="https://gitgud.io/lambadalambda/pleroma-fe" PLEROMA_COMMIT='cbe652f2d94d81fa54a37378b7ff014c4391ca5e' From ae465fe7128db3372e50eaa08c329a4673156925 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 20 Sep 2017 15:09:07 +0100 Subject: [PATCH 05/11] Qvitter url --- src/freedombone-utils-gnusocialtools | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freedombone-utils-gnusocialtools b/src/freedombone-utils-gnusocialtools index 3e45bca5..80eaf1af 100755 --- a/src/freedombone-utils-gnusocialtools +++ b/src/freedombone-utils-gnusocialtools @@ -29,7 +29,7 @@ # along with this program. If not, see . # Qvitter upstream: https://git.gnu.io/h2p/Qvitter" -QVITTER_THEME_REPO="https://github/bashrc/Qvitter" +QVITTER_THEME_REPO="https://github.com/bashrc/Qvitter" QVITTER_THEME_COMMIT='c6f09bda4e45be4290cf7409fa5efb4420538032' PLEROMA_REPO="https://gitgud.io/lambadalambda/pleroma-fe" From a68af68705983e98038a295c9917f075e63e9d3e Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 20 Sep 2017 15:20:03 +0100 Subject: [PATCH 06/11] Retire armadillo --- src/freedombone-utils-gnusocialtools | 158 --------------------------- 1 file changed, 158 deletions(-) diff --git a/src/freedombone-utils-gnusocialtools b/src/freedombone-utils-gnusocialtools index 80eaf1af..6b96a779 100755 --- a/src/freedombone-utils-gnusocialtools +++ b/src/freedombone-utils-gnusocialtools @@ -35,9 +35,6 @@ QVITTER_THEME_COMMIT='c6f09bda4e45be4290cf7409fa5efb4420538032' PLEROMA_REPO="https://gitgud.io/lambadalambda/pleroma-fe" PLEROMA_COMMIT='cbe652f2d94d81fa54a37378b7ff014c4391ca5e' -ARMADILLO_REPO="https://git.postactiv.com/maiya/Armadillo" -ARMADILLO_COMMIT='ec3938a678f373156c4cbf37926c9a5ab68222c4' - SHARINGS_REPO="http://git.lasindias.club/bashrc/Sharings" SHARINGS_COMMIT='d5c6c7f855d9afff9086c09ea706f38c859bc0d4' SHARINGS_THEME_REPO="http://git.lasindias.club/manuel/SharingsTheme" @@ -163,62 +160,6 @@ function pleroma_set_background_image_from_url { 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 { domain_name=$1 app_name=$2 @@ -334,48 +275,6 @@ function install_gnusocial_default_background { 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='@'"$MY_USERNAME@${armadillo_domain}"'' - 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 { app_name="$1" @@ -494,27 +393,6 @@ function upgrade_pleroma { 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 { gnusocial_type=$1 domain_name=$2 @@ -905,42 +783,6 @@ function gnusocial_use_pleroma { 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 { domain_name=$1 social_app_name=$2 From e6d1ec9a9ac8d911dccf6b46140f1e84860c1b80 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 20 Sep 2017 15:23:58 +0100 Subject: [PATCH 07/11] Don't include training carriage return on passwords --- src/freedombone-utils-passwords | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freedombone-utils-passwords b/src/freedombone-utils-passwords index a2980691..7e63b9e0 100755 --- a/src/freedombone-utils-passwords +++ b/src/freedombone-utils-passwords @@ -51,7 +51,7 @@ function enforce_good_passwords { } 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 From 9145ba6d0639fcf75109cad1889edb3125eeb03b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 20 Sep 2017 19:15:36 +0100 Subject: [PATCH 08/11] armbian install instructions --- doc/EN/armbian.org | 88 +++++++++ doc/EN/index.org | 2 + website/EN/armbian.html | 390 ++++++++++++++++++++++++++++++++++++++++ website/EN/index.html | 8 +- 4 files changed, 486 insertions(+), 2 deletions(-) create mode 100644 doc/EN/armbian.org create mode 100644 website/EN/armbian.html diff --git a/doc/EN/armbian.org b/doc/EN/armbian.org new file mode 100644 index 00000000..2074708e --- /dev/null +++ b/doc/EN/armbian.org @@ -0,0 +1,88 @@ +#+TITLE: +#+AUTHOR: Bob Mottram +#+EMAIL: bob@freedombone.net +#+KEYWORDS: freedombox, debian, armbian +#+DESCRIPTION: Installing Freedombone on Armbian +#+OPTIONS: ^:nil toc:nil +#+HTML_HEAD: + +#+BEGIN_CENTER +[[file:images/logo.png]] +#+END_CENTER + + +#+begin_export html +

Installing on Armbian

+#+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. + +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. diff --git a/doc/EN/index.org b/doc/EN/index.org index 85c63e48..3329726a 100644 --- a/doc/EN/index.org +++ b/doc/EN/index.org @@ -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]]. +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. 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. diff --git a/website/EN/armbian.html b/website/EN/armbian.html new file mode 100644 index 00000000..636b97df --- /dev/null +++ b/website/EN/armbian.html @@ -0,0 +1,390 @@ + + + + + + + + + + + + + + + + + +
+ +
+
+
+ +
+

logo.png +

+
+
+ + +

Installing on Armbian

+ +

+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 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: +

+ +
+
sudo dd if=[Armbian .img file] of=/dev/sdX
+
+
+ +

+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: +

+ +
+
ssh root@[local IP address]
+
+
+ +

+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. +

+ +

+When the user account is created type exit to leave the ssh session then log back in with your new user account. +

+ +
+
ssh myusername@[local IP address]
+
+
+ +

+Become the root user: +

+ +
+
sudo su
+
+
+ +

+Then clone the Freedombone repository and checkout the stretch development branch. +

+ +
+
git clone https://github.com/bashrc/freedombone
+cd freedombone
+git checkout stretch
+
+
+ +

+Install the Freedombone commands: +

+ +
+
make install
+
+
+ +

+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: +

+ +
+
freedombone menuconfig
+
+
+ +

+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: +

+ +
+
freedombone menuconfig-onion
+
+
+ +

+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: +

+ +
+
ssh myusername@freedombone.local -p 2222
+
+
+ +

+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 add or remove apps as needed. +

+
+
+ + + + +
+ + diff --git a/website/EN/index.html b/website/EN/index.html index 1606ef2f..6ddb1bfb 100644 --- a/website/EN/index.html +++ b/website/EN/index.html @@ -3,10 +3,10 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + - + on a Beaglebone Black. Or you can install 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 Freedombone with Armbian. +

+

Want to make a community mesh network which doesn't depend upon the internet? The 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.

From 0d8aae85760f25d95d6025d3ffaec3179a8c296d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 20 Sep 2017 20:04:06 +0100 Subject: [PATCH 09/11] Armbian setup image --- doc/EN/armbian.org | 4 ++++ img/armbian_setup.jpg | Bin 0 -> 37166 bytes website/EN/armbian.html | 10 +++++++++- 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 img/armbian_setup.jpg diff --git a/doc/EN/armbian.org b/doc/EN/armbian.org index 2074708e..13f04789 100644 --- a/doc/EN/armbian.org +++ b/doc/EN/armbian.org @@ -39,6 +39,10 @@ ssh root@[local IP address] 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 diff --git a/img/armbian_setup.jpg b/img/armbian_setup.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d251430aee721058ccd343ffab75c4057b9dd858 GIT binary patch literal 37166 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 - + @@ -289,6 +289,14 @@ Once you know the local IP address of your ARM board then you can log into it wi 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.

+
+ +
+

armbian_setup.jpg +

+
+
+

When the user account is created type exit to leave the ssh session then log back in with your new user account.

From ec755b08cccf6b09e7a0c68e34c72b97717a4866 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 20 Sep 2017 21:17:11 +0100 Subject: [PATCH 10/11] Install python setuptools --- src/freedombone-app-mediagoblin | 2 +- src/freedombone-app-searx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/freedombone-app-mediagoblin b/src/freedombone-app-mediagoblin index a6431adf..9831ebe8 100755 --- a/src/freedombone-app-mediagoblin +++ b/src/freedombone-app-mediagoblin @@ -295,7 +295,7 @@ function install_mediagoblin { function_check install_nodejs 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 python3 python3-dev libpython3-dev python3-lxml python3-pil groupadd mediagoblin diff --git a/src/freedombone-app-searx b/src/freedombone-app-searx index b90a9c75..a66507d5 100755 --- a/src/freedombone-app-searx +++ b/src/freedombone-app-searx @@ -828,7 +828,7 @@ function install_searx { 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 apache2-utils + apt-get -yq install apache2-utils python-setuptools apt-get -yq remove --purge apache2-bin* if [ -d /etc/apache2 ]; then From 60f2ac5e2e6bf43029aa22bfa0e247cfe89a326d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 20 Sep 2017 21:30:08 +0100 Subject: [PATCH 11/11] Extra python packages --- src/freedombone-app-mediagoblin | 2 ++ src/freedombone-app-searx | 1 + 2 files changed, 3 insertions(+) diff --git a/src/freedombone-app-mediagoblin b/src/freedombone-app-mediagoblin index 9831ebe8..50524645 100755 --- a/src/freedombone-app-mediagoblin +++ b/src/freedombone-app-mediagoblin @@ -299,6 +299,8 @@ function install_mediagoblin { 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 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 usermod --append -G mediagoblin mediagoblin mkdir -p /var/lib/mediagoblin diff --git a/src/freedombone-app-searx b/src/freedombone-app-searx index a66507d5..af878d3c 100755 --- a/src/freedombone-app-searx +++ b/src/freedombone-app-searx @@ -829,6 +829,7 @@ function install_searx { 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 apache2-utils python-setuptools + apt-get -yq install python-service-identity python-ndg-httpsclient apt-get -yq remove --purge apache2-bin* if [ -d /etc/apache2 ]; then