Merge branch 'stretch' of https://github.com/bashrc/freedombone
|
@ -16,7 +16,7 @@
|
|||
</center>
|
||||
#+END_EXPORT
|
||||
|
||||
With Mediagoblin you can host video and audio content in a similar manner to the proprietary systems such as YouTube and SoundCloud. This system supports free media formats such as /webm/, /ogv/ and /ogg/.
|
||||
With Mediagoblin you can host video and audio content in a similar manner to the proprietary systems such as YouTube and SoundCloud. This system supports free media formats such as /webm/, /ogv/ and /ogg/. Another similar system which might be better fitted for small servers is [[./app_peertube.html][PeerTube]], since it uses webtorrent to distribute video files. Webtorrent will only work with WebRTC enabled browsers though.
|
||||
|
||||
When hosting media files you should take into consideration that since anyone on the internet can view your content then this could significantly increase your bandwidth usage and overall strain on the server. Also unless you are just hosting images then hardware such as the Beaglebone Black won't be powerful enough for a good user experience when either uploading or playing back videos. It's recommended that you use one of the more powerful quad (or more) core single board computers or an old laptop if you want to run Mediagoblin on it.
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ wget https://freedombone.net/downloads/current/freedombone-meshclient-i386.img.x
|
|||
wget https://freedombone.net/downloads/current/freedombone-meshclient-i386.img.xz.sig
|
||||
gpg --verify freedombone-meshclient-i386.img.xz.sig
|
||||
sha256sum freedombone-meshclient-i386.img.xz
|
||||
376668ae375518af268d67b9ccb7ab7b2c2787b445c125f61487ff97950092e8
|
||||
3e88205461bb2061dc172ff0a1e65e5cae1013f8f7dc26c6d5cbe1c986c98555
|
||||
unxz freedombone-meshclient-i386.img.xz
|
||||
sudo dd if=/dev/zero of=/dev/sdX bs=1M count=8
|
||||
sudo dd bs=1M if=freedombone-meshclient-i386.img of=/dev/sdX conv=fdatasync
|
||||
|
@ -61,7 +61,7 @@ wget https://freedombone.net/downloads/current/freedombone-meshclient-insecure-i
|
|||
wget https://freedombone.net/downloads/current/freedombone-meshclient-insecure-i386.img.xz.sig
|
||||
gpg --verify freedombone-meshclient-insecure-i386.img.xz.sig
|
||||
sha256sum freedombone-meshclient-insecure-i386.img.xz
|
||||
81098572ac522b543f2c015dd0819d27c290b93b771efc9de6e93742e3981daf
|
||||
09c059664daf56d210134735d37e8117bb7b755acc8b9b253cdfa42052249ccb
|
||||
unxz freedombone-meshclient-insecure-i386.img.xz
|
||||
sudo dd if=/dev/zero of=/dev/sdX bs=1M count=8
|
||||
sudo dd bs=1M if=freedombone-meshclient-insecure-i386.img of=/dev/sdX conv=fdatasync
|
||||
|
|
|
@ -28,6 +28,10 @@
|
|||
|
||||
When you first boot from the USB drive the system will create some encryption keys, assign a unique network address to the system and then reboot itself. When that's done you should see a prompt asking for a username. This username just makes it easy for others to initially find you on the mesh and will appear in the list of users.
|
||||
|
||||
#+BEGIN_CENTER
|
||||
[[file:images/mesh_initial_login.jpg]]
|
||||
#+END_CENTER
|
||||
|
||||
After a minute or two if you are within wifi range and there is at least one other user on the network then you should see additional icons appear on the desktop, such as /Other Users/ and /Chat/.
|
||||
|
||||
* Boot trouble
|
||||
|
@ -77,7 +81,7 @@ Maybe the internet exists, but you don't care about getting any content from it
|
|||
In your home directory on a system connected via ethernet to an internet router you'll find a file called *vpn.tar.gz*. If you want another mesh to be able to connect to yours then send them this file and get them to uncompress it into their home directory also on an internet gateway machine. If they have an external IP address or domain name for your router then they will be able to VPN connect using the *Connect Meshes* icon. They should also forward port 653 from their internet router to the mesh gateway machine.
|
||||
|
||||
#+BEGIN_CENTER
|
||||
[[file:images/mesh_connect.jpg]]
|
||||
[[file:images/mesh_connect.png]]
|
||||
#+END_CENTER
|
||||
|
||||
You should create a new *vpn.tar.gz* file for every other mesh which wants to be able to connect to yours. If you are prompted for a password it is 'freedombone'.
|
||||
|
@ -101,7 +105,15 @@ On a typical Android device go to *Settings* then *Security* and ensure that *Un
|
|||
On some android devices you may need to move the downloaded APK file from the *Downloads* directory to your *home* directory before you can install it.
|
||||
* Chat System
|
||||
|
||||
Ensure that you're within wifi range of at least one other mesh peer (could be a router or client) and then you should see that the /Chat/ and /Other Users/ icons appear. Select the users icon and you should see a list of users on the mesh. Select the /Chat/ icon and once you are connected you should see the status light turn green. If after a few minutes you don't get the green status light then try closing and re-opening the Tox chat application. Select the plus button to add a friend and then copy and paste in a Tox ID from the users list.
|
||||
Ensure that you're within wifi range of at least one other mesh peer (could be a router or client) and then you should see that the /Chat/ and /Other Users/ icons appear. Select the users icon and you should see a list of users on the mesh.
|
||||
|
||||
#+BEGIN_CENTER
|
||||
[[file:images/mesh_peerslist.png]]
|
||||
#+END_CENTER
|
||||
|
||||
Selecting a user followed by the Ok button will copy their Tox ID to the clipboard.
|
||||
|
||||
Now select the /Chat/ icon and once you are connected you should see the status light turn green. If after a few minutes you don't get the green status light then try closing and re-opening the Tox chat application. Select the plus button to add a friend and then paste in a Tox ID.
|
||||
|
||||
#+BEGIN_CENTER
|
||||
[[file:images/mesh_paste_tox_id.jpg]]
|
||||
|
@ -170,10 +182,10 @@ You can make files publicly available on the network simply by dragging and drop
|
|||
#+END_CENTER
|
||||
|
||||
* Blogging
|
||||
To create a blog post select the /Blog/ icon on the desktop and then use the up and down cursor keys, space bar and enter key to add a new entry. Edit the title of the entry and add your text. You can also include photos if you wish - just copy them to the *CreateBlog/content/images* directory and then link to them as shown.
|
||||
To create a blog post select the /Blog/ icon on the desktop and then select *New blog entry* and *Ok*. Edit the title of the entry and add your text. You can also include photos if you wish - just copy them to the *CreateBlog/content/images* directory and then link to them as shown.
|
||||
|
||||
#+BEGIN_CENTER
|
||||
[[file:images/mesh_new_blog.jpg]]
|
||||
[[file:images/mesh_blog.png]]
|
||||
#+END_CENTER
|
||||
|
||||
To finish your blog entry just select /Save/ and then close the editor. On older hardware it may take a while to publish the results, and this depends upon the amount of computation needed by IPFS to create file hashes. If you make no changes to the default text then the new blog entry will not be saved.
|
||||
|
@ -186,4 +198,8 @@ To finish your blog entry just select /Save/ and then close the editor. On older
|
|||
[[file:images/mesh_view_blog.jpg]]
|
||||
#+END_CENTER
|
||||
|
||||
You can also visit other blogs, edit or delete your previous entry and also change your blog theme.
|
||||
You can also visit other blogs, edit or delete your previous entry and change your blog theme.
|
||||
|
||||
#+BEGIN_CENTER
|
||||
[[file:images/mesh_select_blog_theme.png]]
|
||||
#+END_CENTER
|
||||
|
|
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 53 KiB |
|
@ -329,12 +329,30 @@ function matrix_generate {
|
|||
matrix_configure_homeserver_yaml "${turnkey}" $homeserver_config
|
||||
}
|
||||
|
||||
function create_matrix_user_removal_script {
|
||||
read_config_param MY_USERNAME
|
||||
read_config_param MATRIX_DOMAIN_NAME
|
||||
|
||||
matrix_remove_user=/usr/bin/matrix-remove-user
|
||||
echo '#!/bin/bash' > $matrix_remove_user
|
||||
echo "cd $MATRIX_DATA_DIR" >> $matrix_remove_user
|
||||
echo 'remove_username=$1' >> $matrix_remove_user
|
||||
echo "ADMIN=\"@${MY_USERNAME}:$MATRIX_DOMAIN_NAME\"" >> $matrix_remove_user
|
||||
echo 'BUSY="pragma busy_timeout=20000"' >> $matrix_remove_user
|
||||
echo "BUFFER=\$(sqlite3 homeserver.db \"\$BUSY;select token from access_tokens where user_id like '\$ADMIN' order by id desc limit 1;\")" >> $matrix_remove_user
|
||||
echo "TOKEN=\$(echo \$BUFFER|awk '{print \$2}')" >> $matrix_remove_user
|
||||
echo 'set -x' >> $matrix_remove_user
|
||||
echo "curl -X POST 'https://$MATRIX_DOMAIN_NAME/_matrix/client/r0/admin/deactivate/%40\$remove_username%3A$MATRIX_DOMAIN_NAME?access_token=\$TOKEN' --data '{}'" >> $matrix_remove_user
|
||||
|
||||
chmod +x $matrix_remove_user
|
||||
}
|
||||
|
||||
function remove_user_matrix {
|
||||
remove_username="$1"
|
||||
|
||||
create_matrix_user_removal_script
|
||||
${PROJECT_NAME}-pass -u $remove_username --rmapp matrix
|
||||
|
||||
# TODO: There is no user removal script within synapse
|
||||
$matrix_remove_user "$remove_username"
|
||||
}
|
||||
|
||||
function add_user_matrix {
|
||||
|
@ -780,6 +798,7 @@ function install_matrix {
|
|||
echo $'Failed to add matrix admin user';
|
||||
exit 879352
|
||||
fi
|
||||
create_matrix_user_removal_script
|
||||
|
||||
set_completion_param "matrix domain" "$MATRIX_DOMAIN_NAME"
|
||||
|
||||
|
|
|
@ -10,6 +10,9 @@
|
|||
#
|
||||
# PeerTube server
|
||||
#
|
||||
# There's a problem with installing this onto mesh images, which is
|
||||
# that qemu appears to run out of RAM when using yarn to add webpack.
|
||||
#
|
||||
# License
|
||||
# =======
|
||||
#
|
||||
|
@ -39,6 +42,7 @@ PEERTUBE_REPO="https://github.com/Chocobozzz/PeerTube"
|
|||
PEERTUBE_COMMIT='fef2c7164e025b12a64185dbab058ef4129733c6'
|
||||
PEERTUBE_ONION_PORT=8136
|
||||
PEERTUBE_PORT=9004
|
||||
MESH_PEERTUBE_PORT=8500
|
||||
PEERTUBE_DIR=/etc/peertube
|
||||
|
||||
peertube_variables=(PEERTUBE_DOMAIN_NAME
|
||||
|
@ -479,13 +483,70 @@ function peertube_setup_web {
|
|||
nginx_ensite $PEERTUBE_DOMAIN_NAME
|
||||
}
|
||||
|
||||
function mesh_peertube_setup_web {
|
||||
peertube_nginx_file=$rootdir/etc/nginx/sites-available/peertube
|
||||
|
||||
echo 'server {' >> $peertube_nginx_file
|
||||
echo " listen $MESH_PEERTUBE_PORT http2;" >> $peertube_nginx_file
|
||||
echo ' listen [::]:$MESH_PEERTUBE_PORT http2;' >> $peertube_nginx_file
|
||||
echo ' server_name $HOSTNAME;' >> $peertube_nginx_file
|
||||
echo '' >> $peertube_nginx_file
|
||||
echo ' location / {' >> $peertube_nginx_file
|
||||
echo " proxy_pass http://localhost:${PEERTUBE_PORT};" >> $peertube_nginx_file
|
||||
echo ' proxy_set_header X-Real-IP $remote_addr;' >> $peertube_nginx_file
|
||||
echo ' proxy_set_header Host $host;' >> $peertube_nginx_file
|
||||
echo ' proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $peertube_nginx_file
|
||||
echo '' >> $peertube_nginx_file
|
||||
echo ' # For the video upload' >> $peertube_nginx_file
|
||||
echo ' client_max_body_size 2G;' >> $peertube_nginx_file
|
||||
echo ' }' >> $peertube_nginx_file
|
||||
echo '' >> $peertube_nginx_file
|
||||
echo ' location /static/webseed {' >> $peertube_nginx_file
|
||||
echo " if (\$request_method = 'OPTIONS') {" >> $peertube_nginx_file
|
||||
echo " add_header 'Access-Control-Allow-Origin' '*';" >> $peertube_nginx_file
|
||||
echo " add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';" >> $peertube_nginx_file
|
||||
echo " add_header 'Access-Control-Allow-Headers' 'Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';" >> $peertube_nginx_file
|
||||
echo " add_header 'Access-Control-Max-Age' 1728000;" >> $peertube_nginx_file
|
||||
echo " add_header 'Content-Type' 'text/plain charset=UTF-8';" >> $peertube_nginx_file
|
||||
echo " add_header 'Content-Length' 0;" >> $peertube_nginx_file
|
||||
echo ' return 204;' >> $peertube_nginx_file
|
||||
echo ' }' >> $peertube_nginx_file
|
||||
echo '' >> $peertube_nginx_file
|
||||
echo " if (\$request_method = 'GET') {" >> $peertube_nginx_file
|
||||
echo " add_header 'Access-Control-Allow-Origin' '*';" >> $peertube_nginx_file
|
||||
echo " add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';" >> $peertube_nginx_file
|
||||
echo " add_header 'Access-Control-Allow-Headers' 'Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';" >> $peertube_nginx_file
|
||||
echo ' }' >> $peertube_nginx_file
|
||||
echo '' >> $peertube_nginx_file
|
||||
echo " alias $PEERTUBE_DIR/videos;" >> $peertube_nginx_file
|
||||
echo ' }' >> $peertube_nginx_file
|
||||
echo '' >> $peertube_nginx_file
|
||||
echo ' # Websocket tracker' >> $peertube_nginx_file
|
||||
echo ' location /tracker/socket {' >> $peertube_nginx_file
|
||||
echo ' # Peers send a message to the tracker every 15 minutes' >> $peertube_nginx_file
|
||||
echo ' # Dont close the websocket before this time' >> $peertube_nginx_file
|
||||
echo ' proxy_read_timeout 1200s;' >> $peertube_nginx_file
|
||||
echo ' proxy_set_header Upgrade $http_upgrade;' >> $peertube_nginx_file
|
||||
echo ' proxy_set_header Connection "upgrade";' >> $peertube_nginx_file
|
||||
echo ' proxy_http_version 1.1;' >> $peertube_nginx_file
|
||||
echo ' proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $peertube_nginx_file
|
||||
echo ' proxy_set_header Host $host;' >> $peertube_nginx_file
|
||||
echo " proxy_pass http://localhost:${PEERTUBE_PORT};" >> $peertube_nginx_file
|
||||
echo ' }' >> $peertube_nginx_file
|
||||
echo '}' >> $peertube_nginx_file
|
||||
}
|
||||
|
||||
function peertube_create_config {
|
||||
peertube_config_file=$PEERTUBE_DIR/config/production.yaml
|
||||
peertube_prefix=$1
|
||||
|
||||
peertube_config_file=$peertube_prefix$PEERTUBE_DIR/config/production.yaml
|
||||
|
||||
echo 'listen:' > $peertube_config_file
|
||||
echo " port: $PEERTUBE_PORT" >> $peertube_config_file
|
||||
echo '' >> $peertube_config_file
|
||||
echo '# Correspond to your reverse proxy "listen" configuration' >> $peertube_config_file
|
||||
echo 'webserver:' >> $peertube_config_file
|
||||
if [ ! $peertube_prefix ]; then
|
||||
if [[ $ONION_ONLY == 'no' ]]; then
|
||||
echo ' https: true' >> $peertube_config_file
|
||||
echo " hostname: '$PEERTUBE_DOMAIN_NAME'" >> $peertube_config_file
|
||||
|
@ -495,6 +556,11 @@ function peertube_create_config {
|
|||
echo " hostname: '$PEERTUBE_ONION_HOSTNAME'" >> $peertube_config_file
|
||||
echo ' port: 80' >> $peertube_config_file
|
||||
fi
|
||||
else
|
||||
echo ' https: false' >> $peertube_config_file
|
||||
echo " hostname: ''" >> $peertube_config_file
|
||||
echo " port: $MESH_PEERTUBE_PORT" >> $peertube_config_file
|
||||
fi
|
||||
echo '' >> $peertube_config_file
|
||||
echo '# Your database name will be "peertube"+database.suffix' >> $peertube_config_file
|
||||
echo 'database:' >> $peertube_config_file
|
||||
|
@ -502,7 +568,11 @@ function peertube_create_config {
|
|||
echo ' port: 5432' >> $peertube_config_file
|
||||
echo " suffix: ''" >> $peertube_config_file
|
||||
echo " username: 'peertube'" >> $peertube_config_file
|
||||
if [ ! $peertube_prefix ]; then
|
||||
echo " password: '$PEERTUBE_ADMIN_PASSWORD'" >> $peertube_config_file
|
||||
else
|
||||
echo " password: ''" >> $peertube_config_file
|
||||
fi
|
||||
echo '' >> $peertube_config_file
|
||||
echo '# From the project root directory' >> $peertube_config_file
|
||||
echo 'storage:' >> $peertube_config_file
|
||||
|
@ -519,7 +589,7 @@ function peertube_create_config {
|
|||
echo ' size: 10 # Max number of previews you want to cache' >> $peertube_config_file
|
||||
echo '' >> $peertube_config_file
|
||||
echo 'admin:' >> $peertube_config_file
|
||||
echo " email: '$MY_EMAIL_ADDRESS'" >> $peertube_config_file
|
||||
echo " email: 'root@local'" >> $peertube_config_file
|
||||
echo '' >> $peertube_config_file
|
||||
echo 'signup:' >> $peertube_config_file
|
||||
echo ' enabled: true' >> $peertube_config_file
|
||||
|
@ -543,7 +613,118 @@ function peertube_create_config {
|
|||
echo ' 1080p: false' >> $peertube_config_file
|
||||
}
|
||||
|
||||
function mesh_install_peertube {
|
||||
if [[ $VARIANT != "meshclient" && $VARIANT != "meshusb" ]]; then
|
||||
return
|
||||
fi
|
||||
if [[ $ARCHITECTURE != 'x86_64' && $ARCHITECTURE != 'amd64' ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
chroot "$rootdir" apt-get -yq install ffmpeg curl
|
||||
|
||||
function_check install_postgresql
|
||||
install_postgresql
|
||||
|
||||
if [ -d $rootdir$PEERTUBE_DIR ]; then
|
||||
rm -rf $rootdir$PEERTUBE_DIR
|
||||
fi
|
||||
|
||||
git clone $PEERTUBE_REPO $rootdir$PEERTUBE_DIR
|
||||
|
||||
chroot "$rootdir" groupadd peertube
|
||||
chroot "$rootdir" useradd -c "PeerTube system account" -d $PEERTUBE_DIR -m -r -g peertube peertube
|
||||
|
||||
cd $rootdir$PEERTUBE_DIR
|
||||
git checkout $PEERTUBE_COMMIT -b $PEERTUBE_COMMIT
|
||||
|
||||
|
||||
get_npm_arch
|
||||
|
||||
cat <<EOF > $rootdir/usr/bin/install_peertube
|
||||
#!/bin/bash
|
||||
cd $PEERTUBE_DIR
|
||||
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
|
||||
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
|
||||
apt-get -y update
|
||||
apt-get -yq install yarn
|
||||
|
||||
#npm install --arch=$NPM_ARCH -g yarn
|
||||
#if [ ! "\$?" = "0" ]; then
|
||||
# echo $'PeerTube Failed to install yarn'
|
||||
# exit 79353234
|
||||
#fi
|
||||
#npm install --arch=$NPM_ARCH webpack@3.10.0 --no-optional
|
||||
#if [ ! "\$?" = "0" ]; then
|
||||
# echo $'PeerTube failed to install webpack'
|
||||
# exit 68386353
|
||||
#fi
|
||||
yarn install
|
||||
yarn run build:prod
|
||||
yarn add -D webpack
|
||||
if [ ! "\$?" = "0" ]; then
|
||||
echo $'PeerTube failed to add webpack'
|
||||
exit 67342823
|
||||
fi
|
||||
yarn install --ignore-optional
|
||||
if [ ! "\$?" = "0" ]; then
|
||||
echo $'PeerTube failed to run yarn install'
|
||||
exit 63754235
|
||||
fi
|
||||
npm install --arch=$NPM_ARCH
|
||||
if [ ! "\$?" = "0" ]; then
|
||||
echo $'PeerTube failed to install peertube'
|
||||
exit 7835243
|
||||
fi
|
||||
npm run build --arch=$NPM_ARCH
|
||||
if [ ! "\$?" = "0" ]; then
|
||||
echo $'PeerTube failed to build peertube'
|
||||
exit 5293593
|
||||
fi
|
||||
EOF
|
||||
chmod +x $rootdir/usr/bin/install_peertube
|
||||
chroot "$rootdir" /usr/bin/install_peertube
|
||||
if [ ! "$?" = "0" ]; then
|
||||
echo $'PeerTube install failed'
|
||||
exit 735638
|
||||
fi
|
||||
|
||||
echo '[Unit]' > $rootdir/etc/systemd/system/peertube.service
|
||||
echo 'Description=PeerTube Decentralized video streaming platform' >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo 'After=syslog.target' >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo 'After=network.target' >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo '' >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo '[Service]' >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo 'User=peertube' >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo 'Group=peertube' >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo "WorkingDirectory=$PEERTUBE_DIR" >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo "ExecStart=/usr/local/bin/npm start" >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo "ExecStop=/usr/local/bin/npm stop" >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo 'StandardOutput=syslog' >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo 'StandardError=syslog' >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo 'SyslogIdentifier=peertube' >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo 'Restart=always' >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo "Environment=NODE_ENV=production" >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo '' >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo '[Install]' >> $rootdir/etc/systemd/system/peertube.service
|
||||
echo 'WantedBy=multi-user.target' >> $rootdir/etc/systemd/system/peertube.service
|
||||
|
||||
peertube_create_config $rootdir
|
||||
|
||||
chroot "$rootdir" chown -R peertube:peertube $PEERTUBE_DIR
|
||||
|
||||
mesh_peertube_setup_web
|
||||
}
|
||||
|
||||
function install_peertube {
|
||||
if [[ $VARIANT == "mesh"* ]]; then
|
||||
mesh_install_peertube
|
||||
return
|
||||
fi
|
||||
if [[ $ARCHITECTURE != 'x86_64' && $ARCHITECTURE != 'amd64' ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ ! $ONION_ONLY ]; then
|
||||
ONION_ONLY='no'
|
||||
fi
|
||||
|
|
|
@ -275,6 +275,13 @@ function pelican_delete_blog {
|
|||
esac
|
||||
}
|
||||
|
||||
function pelican_remove_bad_blog_links {
|
||||
current_theme=$1
|
||||
if [ -f $PELICAN_BLOG_INSTALL_DIR/themes/$current_theme/static/css/style.css ]; then
|
||||
sed -i '/googleapi/d' $PELICAN_BLOG_INSTALL_DIR/themes/$current_theme/static/css/style.css
|
||||
fi
|
||||
}
|
||||
|
||||
function pelican_change_theme {
|
||||
THEMES=()
|
||||
for d in $PELICAN_BLOG_INSTALL_DIR/themes/*/ ; do
|
||||
|
@ -323,6 +330,7 @@ function pelican_change_theme {
|
|||
CHOSEN_THEME_INDEX=$((CHOSEN_THEME_INDEX - 1))
|
||||
|
||||
CHOSEN_THEME=${THEMES[$CHOSEN_THEME_INDEX]}
|
||||
pelican_remove_bad_blog_links $CHOSEN_THEME
|
||||
if grep -q "THEME=" $PELICAN_BLOG_INSTALL_DIR/pelicanconf.py; then
|
||||
sed -i "s|THEME=.*|THEME='themes/${CHOSEN_THEME}'|g" $PELICAN_BLOG_INSTALL_DIR/pelicanconf.py
|
||||
else
|
||||
|
@ -733,6 +741,14 @@ function pelican_themes {
|
|||
git clone https://github.com/samael500/w3-personal-blog
|
||||
git clone https://github.com/jarv/water-iris
|
||||
git clone https://github.com/kplaube/yapeme
|
||||
|
||||
# remove any dubious css
|
||||
for d in */ ; do
|
||||
THEME_NAME=$(echo "$d" | awk -F '/' '{print $1}')
|
||||
if [ -d $d/static/css/style.css ]; then
|
||||
sed -i '/googleapi/d' $d/static/css/style.css
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
function mesh_install_pelican {
|
||||
|
|
|
@ -33,9 +33,9 @@ VARIANTS='full full-vim chat'
|
|||
IN_DEFAULT_INSTALL=0
|
||||
SHOW_ON_ABOUT=1
|
||||
|
||||
RIOT_VERSION='0.13.0'
|
||||
RIOT_VERSION='0.13.3'
|
||||
RIOT_FILENAME="riot-v${RIOT_VERSION}"
|
||||
RIOT_HASH='b65535c4c3bfe6407b491f55df238847884ab83a9d5cbdd1f8b4d6e31cbb5870'
|
||||
RIOT_HASH='bcd6c2f4be018612ac76a71b58749a5edab1e02de7d145a22d9b9aa6e6a89129'
|
||||
RIOT_DOWNLOAD_URL="https://github.com/vector-im/riot-web/releases/download/v${RIOT_VERSION}"
|
||||
RIOT_ONION_PORT=8115
|
||||
RIOT_ONION_HOSTNAME=
|
||||
|
|
|
@ -35,10 +35,17 @@ IN_DEFAULT_INSTALL=0
|
|||
SHOW_ON_ABOUT=0
|
||||
SHOW_ICANN_ADDRESS_ON_ABOUT=0
|
||||
|
||||
SCUTTLEBOT_DOMAIN_NAME=
|
||||
SCUTTLEBOT_CODE=
|
||||
SCUTTLEBOT_VERSION='10.4.6'
|
||||
SCUTTLEBOT_PORT=8010
|
||||
SCUTTLEBOT_ONION_PORT=8623
|
||||
GIT_SSB_PORT=7718
|
||||
NGINX_GIT_SSB_PORT=7719
|
||||
|
||||
scuttlebot_variables=(MY_USERNAME
|
||||
SCUTTLEBOT_DOMAIN_NAME
|
||||
SCUTTLEBOT_CODE
|
||||
DEFAULT_DOMAIN_NAME
|
||||
SYSTEM_TYPE)
|
||||
|
||||
|
@ -91,7 +98,13 @@ function add_user_scuttlebot {
|
|||
}
|
||||
|
||||
function install_interactive_scuttlebot {
|
||||
echo -n ''
|
||||
if [[ $ONION_ONLY != "no" ]]; then
|
||||
SCUTTLEBOT_DOMAIN_NAME='scuttlebot.local'
|
||||
write_config_param "SCUTTLEBOT_DOMAIN_NAME" "$SCUTTLEBOT_DOMAIN_NAME"
|
||||
else
|
||||
function_check interactive_site_details
|
||||
interactive_site_details scuttlebot
|
||||
fi
|
||||
APP_INSTALLED=1
|
||||
}
|
||||
|
||||
|
@ -180,9 +193,18 @@ function restore_remote_scuttlebot {
|
|||
|
||||
function remove_scuttlebot {
|
||||
firewall_remove ${SCUTTLEBOT_PORT}
|
||||
firewall_remove ${GIT_SSB_PORT}
|
||||
|
||||
if [ $SCUTTLEBOT_DOMAIN_NAME ]; then
|
||||
nginx_dissite ${SCUTTLEBOT_DOMAIN_NAME}
|
||||
rm /etc/nginx/sites-available/${SCUTTLEBOT_DOMAIN_NAME}
|
||||
fi
|
||||
|
||||
systemctl stop git_ssb
|
||||
systemctl stop scuttlebot
|
||||
systemctl disable git_ssb
|
||||
systemctl disable scuttlebot
|
||||
rm /etc/systemd/system/git_ssb.service
|
||||
rm /etc/systemd/system/scuttlebot.service
|
||||
systemctl daemon-reload
|
||||
|
||||
|
@ -191,15 +213,142 @@ function remove_scuttlebot {
|
|||
if [ -d /etc/scuttlebot ]; then
|
||||
rm -rf /etc/scuttlebot
|
||||
fi
|
||||
if [ -f /usr/bin/git-ssb-create ]; then
|
||||
rm /usr/bin/git-ssb-create
|
||||
fi
|
||||
|
||||
remove_completion_param install_scuttlebot
|
||||
sed -i '/scuttlebot /d' $COMPLETION_FILE
|
||||
}
|
||||
|
||||
function git_ssb_script {
|
||||
if [[ "$1" == "mesh" ]]; then
|
||||
git_ssb_script_name=$rootdir/usr/bin/git-ssb-create
|
||||
else
|
||||
git_ssb_script_name=/usr/bin/git-ssb-create
|
||||
fi
|
||||
echo '#!/bin/bash' > $git_ssb_script_name
|
||||
echo 'reponame="$1"' >> $git_ssb_script_name
|
||||
echo '' >> $git_ssb_script_name
|
||||
echo 'if [[ "$reponame" != "" ]]; then' >> $git_ssb_script_name
|
||||
echo ' mkdir $reponame' >> $git_ssb_script_name
|
||||
echo ' cd $reponame' >> $git_ssb_script_name
|
||||
echo ' git init' >> $git_ssb_script_name
|
||||
echo ' git ssb create ssb $reponame' >> $git_ssb_script_name
|
||||
echo ' git push --tags ssb master' >> $git_ssb_script_name
|
||||
echo 'fi' >> $git_ssb_script_name
|
||||
echo 'exit 0' >> $git_ssb_script_name
|
||||
chmod +x $git_ssb_script_name
|
||||
}
|
||||
|
||||
function scuttlebot_git_setup {
|
||||
if [[ "$1" == "mesh" ]]; then
|
||||
if [ ! -d $rootdir/usr/local/lib/node_modules/git-ssb/node_modules/git-ssb-web/highlight ]; then
|
||||
mkdir $rootdir/usr/local/lib/node_modules/git-ssb/node_modules/git-ssb-web/highlight
|
||||
fi
|
||||
if [ ! -f $rootdir/usr/local/lib/node_modules/git-ssb/node_modules/highlight.js/styles/foundation.css ]; then
|
||||
echo $'Could not find foundation.css'
|
||||
exit 347687245
|
||||
fi
|
||||
cp $rootdir/usr/local/lib/node_modules/git-ssb/node_modules/highlight.js/styles/foundation.css $rootdir/usr/local/lib/node_modules/git-ssb/node_modules/git-ssb-web/highlight/foundation.css
|
||||
|
||||
git_ssb_nginx_site=$rootdir/etc/nginx/sites-available/git_ssb
|
||||
echo 'server {' > $git_ssb_nginx_site
|
||||
echo " listen $NGINX_GIT_SSB_PORT default_server;" >> $git_ssb_nginx_site
|
||||
echo " server_name P${PEER_ID}.local;" >> $git_ssb_nginx_site
|
||||
echo '' >> $git_ssb_nginx_site
|
||||
echo ' access_log /dev/null;' >> $git_ssb_nginx_site
|
||||
echo ' error_log /dev/null;' >> $git_ssb_nginx_site
|
||||
echo '' >> $git_ssb_nginx_site
|
||||
echo ' add_header X-XSS-Protection "1; mode=block";' >> $git_ssb_nginx_site
|
||||
echo ' add_header X-Content-Type-Options nosniff;' >> $git_ssb_nginx_site
|
||||
echo ' add_header X-Frame-Options SAMEORIGIN;' >> $git_ssb_nginx_site
|
||||
else
|
||||
if [ ! $SCUTTLEBOT_DOMAIN_NAME ]; then
|
||||
exit 7357225
|
||||
fi
|
||||
|
||||
if [ ! -d /usr/local/lib/node_modules/git-ssb/node_modules/git-ssb-web/highlight ]; then
|
||||
mkdir /usr/local/lib/node_modules/git-ssb/node_modules/git-ssb-web/highlight
|
||||
fi
|
||||
if [ ! -f /usr/local/lib/node_modules/git-ssb/node_modules/highlight.js/styles/foundation.css ]; then
|
||||
echo $'Could not find foundation.css'
|
||||
exit 347687245
|
||||
fi
|
||||
cp /usr/local/lib/node_modules/git-ssb/node_modules/highlight.js/styles/foundation.css /usr/local/lib/node_modules/git-ssb/node_modules/git-ssb-web/highlight/foundation.css
|
||||
|
||||
git_ssb_nginx_site=/etc/nginx/sites-available/${SCUTTLEBOT_DOMAIN_NAME}
|
||||
function_check nginx_http_redirect
|
||||
nginx_http_redirect $SCUTTLEBOT_DOMAIN_NAME "index index.html"
|
||||
echo 'server {' >> $git_ssb_nginx_site
|
||||
echo ' listen 443 ssl;' >> $git_ssb_nginx_site
|
||||
echo ' listen [::]:443 ssl;' >> $git_ssb_nginx_site
|
||||
echo " server_name $SCUTTLEBOT_DOMAIN_NAME;" >> $git_ssb_nginx_site
|
||||
echo '' >> $git_ssb_nginx_site
|
||||
function_check nginx_compress
|
||||
nginx_compress $SCUTTLEBOT_DOMAIN_NAME
|
||||
echo '' >> $git_ssb_nginx_site
|
||||
echo ' # Security' >> $git_ssb_nginx_site
|
||||
function_check nginx_ssl
|
||||
nginx_ssl $SCUTTLEBOT_DOMAIN_NAME
|
||||
|
||||
function_check nginx_disable_sniffing
|
||||
nginx_disable_sniffing $SCUTTLEBOT_DOMAIN_NAME
|
||||
fi
|
||||
|
||||
echo '' >> $git_ssb_nginx_site
|
||||
echo ' root /usr/local/lib/node_modules/git-ssb/node_modules/git-ssb-web;' >> $git_ssb_nginx_site
|
||||
echo '' >> $git_ssb_nginx_site
|
||||
echo ' location = / {' >> $git_ssb_nginx_site
|
||||
echo " proxy_pass http://localhost:${GIT_SSB_PORT};" >> $git_ssb_nginx_site
|
||||
echo ' proxy_set_header X-Real-IP $remote_addr;' >> $git_ssb_nginx_site
|
||||
echo ' proxy_set_header Host $host;' >> $git_ssb_nginx_site
|
||||
echo ' proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $git_ssb_nginx_site
|
||||
echo ' proxy_http_version 1.1;' >> $git_ssb_nginx_site
|
||||
echo ' proxy_set_header Upgrade $http_upgrade;' >> $git_ssb_nginx_site
|
||||
echo ' proxy_set_header Connection upgrade;' >> $git_ssb_nginx_site
|
||||
echo ' }' >> $git_ssb_nginx_site
|
||||
echo '}' >> $git_ssb_nginx_site
|
||||
|
||||
if [ $SCUTTLEBOT_ONION_HOSTNAME ]; then
|
||||
echo '' >> $git_ssb_nginx_site
|
||||
echo 'server {' >> $git_ssb_nginx_site
|
||||
echo " listen 127.0.0.1:${SCUTTLEBOT_ONION_PORT} default_server;" >> $git_ssb_nginx_site
|
||||
echo " server_name ${SCUTTLEBOT_ONION_HOSTNAME};" >> $git_ssb_nginx_site
|
||||
echo '' >> $git_ssb_nginx_site
|
||||
echo ' access_log /dev/null;' >> $git_ssb_nginx_site
|
||||
echo ' error_log /dev/null;' >> $git_ssb_nginx_site
|
||||
echo '' >> $git_ssb_nginx_site
|
||||
echo ' add_header X-XSS-Protection "1; mode=block";' >> $git_ssb_nginx_site
|
||||
echo ' add_header X-Content-Type-Options nosniff;' >> $git_ssb_nginx_site
|
||||
echo ' add_header X-Frame-Options SAMEORIGIN;' >> $git_ssb_nginx_site
|
||||
echo '' >> $git_ssb_nginx_site
|
||||
echo ' root /usr/local/lib/node_modules/git-ssb/node_modules/git-ssb-web;' >> $git_ssb_nginx_site
|
||||
echo '' >> $git_ssb_nginx_site
|
||||
echo ' location = / {' >> $git_ssb_nginx_site
|
||||
echo " proxy_pass http://localhost:${GIT_SSB_PORT};" >> $git_ssb_nginx_site
|
||||
echo ' proxy_set_header X-Real-IP $remote_addr;' >> $git_ssb_nginx_site
|
||||
echo ' proxy_set_header Host $host;' >> $git_ssb_nginx_site
|
||||
echo ' proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $git_ssb_nginx_site
|
||||
echo ' proxy_http_version 1.1;' >> $git_ssb_nginx_site
|
||||
echo ' proxy_set_header Upgrade $http_upgrade;' >> $git_ssb_nginx_site
|
||||
echo ' proxy_set_header Connection upgrade;' >> $git_ssb_nginx_site
|
||||
echo ' }' >> $git_ssb_nginx_site
|
||||
echo '}' >> $git_ssb_nginx_site
|
||||
fi
|
||||
nginx_ensite git_ssb
|
||||
}
|
||||
|
||||
function mesh_install_scuttlebot {
|
||||
SCUTTLEBOT_ONION_HOSTNAME=
|
||||
|
||||
get_npm_arch
|
||||
|
||||
cat <<EOF > $rootdir/usr/bin/install_scuttlebot
|
||||
#!/bin/bash
|
||||
npm install -g scuttlebot@${SCUTTLEBOT_VERSION}
|
||||
npm install --arch=$NPM_ARCH -g scuttlebot@${SCUTTLEBOT_VERSION}
|
||||
npm install --arch=$NPM_ARCH -g git-ssb
|
||||
npm install --arch=$NPM_ARCH -g git-remote-ssb
|
||||
EOF
|
||||
chroot "$rootdir" /bin/chmod +x /usr/bin/install_scuttlebot
|
||||
chroot "$rootdir" /usr/bin/install_scuttlebot
|
||||
|
@ -234,6 +383,9 @@ EOF
|
|||
echo '' >> $rootdir/etc/systemd/system/scuttlebot.service
|
||||
echo '[Install]' >> $rootdir/etc/systemd/system/scuttlebot.service
|
||||
echo 'WantedBy=multi-user.target' >> $rootdir/etc/systemd/system/scuttlebot.service
|
||||
|
||||
scuttlebot_git_setup mesh
|
||||
git_ssb_script mesh
|
||||
}
|
||||
|
||||
function install_scuttlebot {
|
||||
|
@ -245,6 +397,9 @@ function install_scuttlebot {
|
|||
exit 528253
|
||||
fi
|
||||
|
||||
npm install -g git-ssb
|
||||
npm install -g git-remote-ssb
|
||||
|
||||
if [ ! -d /etc/scuttlebot ]; then
|
||||
mkdir -p /etc/scuttlebot
|
||||
fi
|
||||
|
@ -270,6 +425,24 @@ function install_scuttlebot {
|
|||
echo '[Install]' >> /etc/systemd/system/scuttlebot.service
|
||||
echo 'WantedBy=multi-user.target' >> /etc/systemd/system/scuttlebot.service
|
||||
|
||||
echo '[Unit]' > /etc/systemd/system/git_ssb.service
|
||||
echo 'Description=Git SSB (SSB git web interface)' >> /etc/systemd/system/git_ssb.service
|
||||
echo 'After=syslog.target' >> /etc/systemd/system/git_ssb.service
|
||||
echo 'After=network.target' >> /etc/systemd/system/git_ssb.service
|
||||
echo 'After=scuttlebot.target' >> /etc/systemd/system/git_ssb.service
|
||||
echo '' >> /etc/systemd/system/git_ssb.service
|
||||
echo '[Service]' >> /etc/systemd/system/git_ssb.service
|
||||
echo 'Type=simple' >> /etc/systemd/system/git_ssb.service
|
||||
echo 'User=scuttlebot' >> /etc/systemd/system/git_ssb.service
|
||||
echo 'Group=scuttlebot' >> /etc/systemd/system/git_ssb.service
|
||||
echo "WorkingDirectory=/etc/scuttlebot" >> /etc/systemd/system/git_ssb.service
|
||||
echo "ExecStart=/usr/bin/git ssb web --public localhost:$GIT_SSB_PORT" >> /etc/systemd/system/git_ssb.service
|
||||
echo 'Restart=always' >> /etc/systemd/system/git_ssb.service
|
||||
echo 'Environment="USER=scuttlebot"' >> /etc/systemd/system/git_ssb.service
|
||||
echo '' >> /etc/systemd/system/git_ssb.service
|
||||
echo '[Install]' >> /etc/systemd/system/git_ssb.service
|
||||
echo 'WantedBy=multi-user.target' >> /etc/systemd/system/git_ssb.service
|
||||
|
||||
chown -R scuttlebot:scuttlebot /etc/scuttlebot
|
||||
|
||||
# files gw_name myhostname mdns4_minimal [NOTFOUND=return] dns
|
||||
|
@ -279,6 +452,9 @@ function install_scuttlebot {
|
|||
systemctl enable scuttlebot.service
|
||||
systemctl daemon-reload
|
||||
systemctl start scuttlebot.service
|
||||
systemctl enable git_ssb.service
|
||||
systemctl daemon-reload
|
||||
systemctl start git_ssb.service
|
||||
|
||||
sleep 3
|
||||
|
||||
|
@ -309,6 +485,17 @@ function install_scuttlebot {
|
|||
systemctl restart scuttlebot.service
|
||||
|
||||
firewall_add scuttlebot ${SCUTTLEBOT_PORT}
|
||||
firewall_add git_ssb ${GIT_SSB_PORT}
|
||||
|
||||
|
||||
SCUTTLEBOT_ONION_HOSTNAME=$(add_onion_service scuttlebot 80 ${SCUTTLEBOT_ONION_PORT})
|
||||
scuttlebot_git_setup
|
||||
git_ssb_script
|
||||
|
||||
function_check create_site_certificate
|
||||
create_site_certificate ${SCUTTLEBOT_DOMAIN_NAME} 'yes'
|
||||
|
||||
systemctl restart nginx
|
||||
|
||||
if ! grep -q "scuttlebot version:" ${COMPLETION_FILE}; then
|
||||
echo "scuttlebot version:${SCUTTLEBOT_VERSION}" >> ${COMPLETION_FILE}
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
VARIANTS='full full-vim social'
|
||||
VARIANTS=''
|
||||
|
||||
IN_DEFAULT_INSTALL=0
|
||||
SHOW_ON_ABOUT=1
|
||||
|
|
|
@ -645,9 +645,9 @@ function xmpp_onion_addresses {
|
|||
echo ' ["jabber-germany.de"] = "dbbrphko5tqcpar3.onion";' >> $filename
|
||||
echo ' ["kode.im"] = "ihkw7qy3tok45dun.onion";' >> $filename
|
||||
echo ' ["im.koderoot.net"] = "ihkw7qy3tok45dun.onion";' >> $filename
|
||||
echo ' ["adb-centralen.se"] = "37x6i3wgr2jyublb.onion";' >> $filename
|
||||
echo ' ["adb-centralen.se"] = "qai7jjjnhbrdiexf.onion";' >> $filename
|
||||
echo ' ["joelpurra.se"] = "37x6i3wgr2jyublb.onion";' >> $filename
|
||||
echo ' ["nordberg.se"] = "37x6i3wgr2jyublb.onion";' >> $filename
|
||||
echo ' ["nordberg.se"] = "qai7jjjnhbrdiexf.onion";' >> $filename
|
||||
echo ' ["jabber.lqdn.fr"] = "jabber63t4r2qi57.onion";' >> $filename
|
||||
echo ' ["jabber.otr.im"] = "5rgdtlawqkcplz75.onion";' >> $filename
|
||||
echo ' ["otromundo.cf"] = "arauemwe2utqqzye.onion";' >> $filename
|
||||
|
|
|
@ -69,7 +69,7 @@ TEMPBUILD_DIR=~/.tmp_${PROJECT_NAME}_build
|
|||
VMDEBOOTSTRAP_REPO=git://git.liw.fi/vmdebootstrap
|
||||
VMDEBOOTSTRAP_VERSION=0.8
|
||||
MAKEFILE=${PROJECT_NAME}-image-makefile
|
||||
IMAGE_SIZE=7.8G
|
||||
IMAGE_SIZE=7.9G
|
||||
IMAGE_SIZE_SPECIFIED=
|
||||
IMAGE_NAME='full'
|
||||
|
||||
|
@ -544,7 +544,7 @@ if [[ $VARIANT == 'meshclient' || $VARIANT == 'meshusb' ]]; then
|
|||
fi
|
||||
|
||||
if [ ! $IMAGE_SIZE_SPECIFIED ]; then
|
||||
IMAGE_SIZE=7.5G
|
||||
IMAGE_SIZE=7.9G
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
|
@ -99,7 +99,8 @@ INSECURE='no'
|
|||
MESH_DESKTOP_BACKGROUND_IMAGE=/usr/local/share/${PROJECT_NAME}_mesh_initial_background.png
|
||||
|
||||
# The browser application to use
|
||||
BROWSER=midori
|
||||
BROWSER=firefox
|
||||
BROWSER_OPTIONS='-url'
|
||||
|
||||
MESH_INSTALL_DIR=/var/lib
|
||||
|
||||
|
@ -587,7 +588,8 @@ cd /etc/patchwork
|
|||
npm install --arch=$NPM_ARCH --build-from-source
|
||||
npm install --arch=$NPM_ARCH --save-dev electron-rebuild
|
||||
./node_modules/.bin/electron-rebuild
|
||||
npm install --arch=$NPM_ARCH git-ssb
|
||||
npm install --arch=$NPM_ARCH -g git-ssb --registry=http://localhost:8043/
|
||||
#npm install --arch=$NPM_ARCH git-ssb
|
||||
EOF
|
||||
chroot "$rootdir" /bin/chmod +x /usr/bin/install_patchwork
|
||||
chroot "$rootdir" /usr/bin/install_patchwork
|
||||
|
@ -704,6 +706,7 @@ initialise_mesh() {
|
|||
install_web_server
|
||||
install_pelican
|
||||
mesh_install_cryptpad
|
||||
#mesh_install_peertube
|
||||
if [ $ENABLE_ZERONET ]; then
|
||||
install_zeronet
|
||||
fi
|
||||
|
@ -787,7 +790,7 @@ function mesh_client_startup_applications {
|
|||
echo '' >> $START_DESKTOP
|
||||
echo 'INITIAL_TOX_USERNAME=""' >> $START_DESKTOP
|
||||
echo 'while [ ${#INITIAL_TOX_USERNAME} -eq 0 ]; do' >> $START_DESKTOP
|
||||
echo " data=\$(zenity --forms --title=\"$MESH_TITLE\" --text=\"$MESH_SET_USERNAME\" --separator=\",\" --add-entry=\"Username\")" >> $START_DESKTOP
|
||||
echo " data=\$(zenity --entry --title=\"$MESH_TITLE\" --text=\"$MESH_SET_USERNAME\")" >> $START_DESKTOP
|
||||
echo ' accepted=$?' >> $START_DESKTOP
|
||||
echo ' if ((accepted == 0)); then' >> $START_DESKTOP
|
||||
echo " INITIAL_TOX_USERNAME=\$(awk -F, '{print \$1}' <<<\$data)" >> $START_DESKTOP
|
||||
|
@ -878,8 +881,10 @@ function configure_user_interface {
|
|||
# clipboard
|
||||
chroot "$rootdir" apt-get -yq install xclip
|
||||
|
||||
# audio recording
|
||||
# multimedia recording and editing
|
||||
chroot "$rootdir" apt-get -yq install audacity
|
||||
chroot "$rootdir" apt-get -yq install shotwell
|
||||
chroot "$rootdir" apt-get -yq install kdenlive breeze-icon-theme
|
||||
|
||||
# for gtk dialog entry
|
||||
chroot "$rootdir" apt-get -yq install zenity
|
||||
|
@ -887,6 +892,9 @@ function configure_user_interface {
|
|||
# Produce a text file on the desktop listing users on the mesh
|
||||
cat <<EOF > $rootdir/usr/bin/list-tox-users
|
||||
#!/bin/bash
|
||||
StrMeshUsers=\$"Mesh Users"
|
||||
StrUsername=\$'Username'
|
||||
StrToxID=\$'Tox ID'
|
||||
ethernet_connected=\$(cat /sys/class/net/eth0/carrier)
|
||||
users_list=\$(lstox | awk -F ' ' '{\$1=""; print \$0}' | sed -e 's/^[[:space:]]*//' | sort -d | uniq)
|
||||
if [ \${#users_list} -eq 0 ]; then
|
||||
|
@ -898,13 +906,25 @@ if [ \$no_of_users -gt 0 ]; then
|
|||
echo "\$users_list" > /tmp/Users.txt
|
||||
chown $MY_USERNAME:$MY_USERNAME /tmp/Users.txt
|
||||
|
||||
echo 'showing_users=\$(ps aux | grep $MESH_TEXT_EDITOR | grep "Users.txt")' > /home/$MY_USERNAME/showusers
|
||||
echo 'if [ \${#showing_users} -eq 0 ]; then' >> /home/$MY_USERNAME/showusers
|
||||
echo ' $MESH_TEXT_EDITOR /tmp/Users.txt' >> /home/$MY_USERNAME/showusers
|
||||
if [ ! -f /home/$MY_USERNAME/showusers ]; then
|
||||
echo '#!/bin/bash' > /home/$MY_USERNAME/showusers
|
||||
echo 'data=\$(' >> /home/$MY_USERNAME/showusers
|
||||
echo 'cat /tmp/Users.txt | \' >> /home/$MY_USERNAME/showusers
|
||||
echo " awk -F ' ' '{" >> /home/$MY_USERNAME/showusers
|
||||
echo ' for(i=1;i<=NF;i++){' >> /home/$MY_USERNAME/showusers
|
||||
echo ' print \$i;' >> /home/$MY_USERNAME/showusers
|
||||
echo ' }' >> /home/$MY_USERNAME/showusers
|
||||
echo "}' | \\\\" >> /home/$MY_USERNAME/showusers
|
||||
echo ' zenity --list \' >> /home/$MY_USERNAME/showusers
|
||||
echo " --title='\$StrMeshUsers' \\\\" >> /home/$MY_USERNAME/showusers
|
||||
echo " --column='\$StrUsername' --column='\$StrToxID' \\\\" >> /home/$MY_USERNAME/showusers
|
||||
echo ' --print-column=2 --hide-column=2 --width=250 --height=400)' >> /home/$MY_USERNAME/showusers
|
||||
echo 'if [ ! \$data ]; then' >> /home/$MY_USERNAME/showusers
|
||||
echo ' exit 0' >> /home/$MY_USERNAME/showusers
|
||||
echo 'fi' >> /home/$MY_USERNAME/showusers
|
||||
echo 'exit 0' >> /home/$MY_USERNAME/showusers
|
||||
echo 'echo "\$data" | xclip -selection clipboard' >> /home/$MY_USERNAME/showusers
|
||||
chmod +x /home/$MY_USERNAME/showusers
|
||||
chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/showusers
|
||||
fi
|
||||
|
||||
echo '[Desktop Entry]' > /home/$MY_USERNAME/Desktop/Users.desktop
|
||||
if [ \$no_of_users -lt 2 ]; then
|
||||
|
@ -946,7 +966,7 @@ if [ \$no_of_users -gt 0 ]; then
|
|||
echo 'Comment[it]=Editing collaborativo di documenti in tempo reale' >> /home/$MY_USERNAME/Desktop/cryptpad.desktop
|
||||
echo 'Comment[ru]=Совместное редактирование документов в режиме реального времени' >> /home/$MY_USERNAME/Desktop/cryptpad.desktop
|
||||
echo 'Comment[zh]=实时协同编辑文件' >> /home/$MY_USERNAME/Desktop/cryptpad.desktop
|
||||
echo "Exec=$BROWSER http://\${HOSTNAME}.local" >> /home/$MY_USERNAME/Desktop/cryptpad.desktop
|
||||
echo "Exec=$BROWSER $BROWSER_OPTIONS http://\${HOSTNAME}.local" >> /home/$MY_USERNAME/Desktop/cryptpad.desktop
|
||||
echo "Icon=/usr/share/$PROJECT_NAME/avatars/icon_cryptpad.png" >> /home/$MY_USERNAME/Desktop/cryptpad.desktop
|
||||
echo 'Terminal=false' >> /home/$MY_USERNAME/Desktop/cryptpad.desktop
|
||||
echo 'Categories=Application;' >> /home/$MY_USERNAME/Desktop/cryptpad.desktop
|
||||
|
@ -954,7 +974,38 @@ if [ \$no_of_users -gt 0 ]; then
|
|||
chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Desktop/cryptpad.desktop
|
||||
else
|
||||
if ! grep -q "\${HOSTNAME}.local" /home/$MY_USERNAME/Desktop/cryptpad.desktop; then
|
||||
sed -i "s|Exec=.*|Exec=$BROWSER http://\${HOSTNAME}.local|g" /home/$MY_USERNAME/Desktop/cryptpad.desktop
|
||||
sed -i "s|Exec=.*|Exec=$BROWSER $BROWSER_OPTIONS http://\${HOSTNAME}.local|g" /home/$MY_USERNAME/Desktop/cryptpad.desktop
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -d /etc/peertube ]; then
|
||||
if [ ! -f /home/$MY_USERNAME/.peertube.desktop ]; then
|
||||
if [ ! -f /home/$MY_USERNAME/Desktop/peertube.desktop ]; then
|
||||
echo '[Desktop Entry]' > /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Name=PeerTube' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Type=Application' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Comment=Upload and view videos on the mesh' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Comment[el]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Comment[ar]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Comment[ca]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Comment[hi]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Comment[fr]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Comment[de]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Comment[es]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Comment[it]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Comment[ru]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Comment[zh]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo "Exec=$BROWSER $BROWSER_OPTIONS http://\${HOSTNAME}.local:$MESH_PEERTUBE_PORT" >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo "Icon=/usr/share/$PROJECT_NAME/avatars/icon_peertube.png" >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Terminal=false' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
echo 'Categories=Application;' >> /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
chmod +x /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
else
|
||||
if ! grep -q "\${HOSTNAME}.local" /home/$MY_USERNAME/Desktop/peertube.desktop; then
|
||||
sed -i "s|Exec=.*|Exec=$BROWSER $BROWSER_OPTIONS http://\${HOSTNAME}.local:$MESH_PEERTUBE_PORT|g" /home/$MY_USERNAME/Desktop/peertube.desktop
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
@ -1030,7 +1081,7 @@ if [ \$no_of_users -gt 0 ]; then
|
|||
echo "Comment[it]=Collegarsi ad un'altra rete di maglie via internet" >> /home/$MY_USERNAME/Desktop/vpn.desktop
|
||||
echo 'Comment[ru]=Подключение к другой сети с сетью через Интернет' >> /home/$MY_USERNAME/Desktop/vpn.desktop
|
||||
echo 'Comment[zh]=通过互联网连接到另一个网状网络' >> /home/$MY_USERNAME/Desktop/vpn.desktop
|
||||
echo 'Exec=mate-terminal --full-screen -e /usr/local/bin/${PROJECT_NAME}-mesh-connect' >> /home/$MY_USERNAME/Desktop/vpn.desktop
|
||||
echo 'Exec=/usr/local/bin/${PROJECT_NAME}-mesh-connect' >> /home/$MY_USERNAME/Desktop/vpn.desktop
|
||||
echo 'Icon=/usr/share/$PROJECT_NAME/avatars/icon_connect.png' >> /home/$MY_USERNAME/Desktop/vpn.desktop
|
||||
echo 'StartupNotify=false' >> /home/$MY_USERNAME/Desktop/vpn.desktop
|
||||
chmod +x /home/$MY_USERNAME/Desktop/vpn.desktop
|
||||
|
@ -1062,7 +1113,7 @@ if [ \$no_of_users -gt 0 ]; then
|
|||
echo "Comment[it]=Visita un sito" >> /home/$MY_USERNAME/Desktop/sites.desktop
|
||||
echo "Comment[ru]=Посетите сайт" >> /home/$MY_USERNAME/Desktop/sites.desktop
|
||||
echo "Comment[zh]=访问网站" >> /home/$MY_USERNAME/Desktop/sites.desktop
|
||||
echo 'Exec=mate-terminal --full-screen -e /usr/local/bin/${PROJECT_NAME}-mesh-visit-site' >> /home/$MY_USERNAME/Desktop/sites.desktop
|
||||
echo 'Exec=/usr/local/bin/${PROJECT_NAME}-mesh-visit-site' >> /home/$MY_USERNAME/Desktop/sites.desktop
|
||||
echo 'Icon=/usr/share/$PROJECT_NAME/avatars/icon_sites.png' >> /home/$MY_USERNAME/Desktop/sites.desktop
|
||||
echo 'StartupNotify=false' >> /home/$MY_USERNAME/Desktop/sites.desktop
|
||||
chmod +x /home/$MY_USERNAME/Desktop/sites.desktop
|
||||
|
@ -1092,7 +1143,7 @@ if [ \$no_of_users -gt 0 ]; then
|
|||
echo 'Comment[it]=Visualizza o crea voci di blog' >> /home/$MY_USERNAME/Desktop/blog.desktop
|
||||
echo 'Comment[ru]=Просмотр или создание записей в блоге' >> /home/$MY_USERNAME/Desktop/blog.desktop
|
||||
echo 'Comment[zh]=查看或创建博客条目' >> /home/$MY_USERNAME/Desktop/blog.desktop
|
||||
echo 'Exec=mate-terminal --full-screen -e /usr/local/bin/${PROJECT_NAME}-mesh-blog' >> /home/$MY_USERNAME/Desktop/blog.desktop
|
||||
echo 'Exec=/usr/local/bin/${PROJECT_NAME}-mesh-blog' >> /home/$MY_USERNAME/Desktop/blog.desktop
|
||||
echo 'Icon=/usr/share/$PROJECT_NAME/avatars/icon_blog.png' >> /home/$MY_USERNAME/Desktop/blog.desktop
|
||||
echo 'StartupNotify=false' >> /home/$MY_USERNAME/Desktop/blog.desktop
|
||||
chmod +x /home/$MY_USERNAME/Desktop/blog.desktop
|
||||
|
@ -1250,7 +1301,7 @@ EOF
|
|||
fi
|
||||
|
||||
# browser
|
||||
chroot "$rootdir" apt-get -yq install $BROWSER
|
||||
chroot "$rootdir" apt-get -yq install firefox-esr
|
||||
|
||||
# help
|
||||
mkdir -p $rootdir/home/${MY_USERNAME}/help/images
|
||||
|
|
|
@ -32,8 +32,8 @@ export TEXTDOMAIN=${PROJECT_NAME}-image-mesh
|
|||
export TEXTDOMAINDIR="/usr/share/locale"
|
||||
|
||||
# The browser application to use
|
||||
BROWSER=midori
|
||||
BROWSER_OPTIONS='-p'
|
||||
BROWSER=firefox
|
||||
BROWSER_OPTIONS='-private -url'
|
||||
|
||||
MY_USERNAME='fbone'
|
||||
PEER_ID=
|
||||
|
@ -88,6 +88,59 @@ SCUTTLEBOT_PORT=8010
|
|||
CRYPTPAD_PORT=9003
|
||||
CRYPTPAD_DIR=/etc/cryptpad
|
||||
|
||||
PEERTUBE_DIR=/etc/peertube
|
||||
|
||||
function run_system_query_postgresql {
|
||||
query=$1
|
||||
cd /etc/postgresql
|
||||
sudo -u postgres psql -c "$query"
|
||||
}
|
||||
|
||||
function create_password {
|
||||
openssl rand -base64 32 | tr -dc A-Za-z0-9 | head -c ${1} ; echo -n ''
|
||||
}
|
||||
|
||||
function enable_peertube {
|
||||
if [ ! -d $PEERTUBE_DIR ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
PEERTUBE_ADMIN_PASSWORD="$(create_password 10)"
|
||||
|
||||
if [ -d $PEERTUBE_DIR/videos ]; then
|
||||
rm -rf $PEERTUBE_DIR/videos/*
|
||||
fi
|
||||
if [ -d $PEERTUBE_DIR/thumbnails ]; then
|
||||
rm -rf $PEERTUBE_DIR/thumbnails/*
|
||||
fi
|
||||
|
||||
systemctl restart postgresql
|
||||
run_system_query_postgresql "DROP DATABASE peertube;"
|
||||
run_system_query_postgresql "CREATE USER peertube WITH PASSWORD '$PEERTUBE_ADMIN_PASSWORD';"
|
||||
run_system_query_postgresql "CREATE DATABASE peertube OWNER peertube;"
|
||||
run_system_query_postgresql "GRANT ALL PRIVILEGES ON DATABASE peertube to peertube;"
|
||||
run_system_query_postgresql "set statement_timeout to 40000;"
|
||||
|
||||
peertube_config_file=$PEERTUBE_DIR/config/production.yaml
|
||||
sed -i "s|hostname:.*|hostname: 'P$PEER_ID.local'|g" $peertube_config_file
|
||||
sed -i "s|password:.*|password: '$PEERTUBE_ADMIN_PASSWORD'|g" $peertube_config_file
|
||||
|
||||
peertube_nginx_file=/etc/nginx/sites-available/peertube
|
||||
sed -i "s|server_name.*|server_name P$PEER_ID.local;|g" $peertube_nginx_file
|
||||
|
||||
chown -R peertube:peertube $PEERTUBE_DIR
|
||||
|
||||
# Set up the web server
|
||||
ln -s /etc/nginx/sites-available/peertube /etc/nginx/sites-enabled/peertube
|
||||
if [ -f /etc/nginx/sites-enabled/default ]; then
|
||||
rm /etc/nginx/sites-enabled/default
|
||||
fi
|
||||
|
||||
systemctl enable peertube
|
||||
systemctl daemon-reload
|
||||
systemctl start peertube
|
||||
}
|
||||
|
||||
function enable_cryptpad {
|
||||
if [ ! -d $CRYPTPAD_DIR ]; then
|
||||
return
|
||||
|
@ -95,7 +148,9 @@ function enable_cryptpad {
|
|||
|
||||
# Set up the web server
|
||||
ln -s /etc/nginx/sites-available/cryptpad /etc/nginx/sites-enabled/cryptpad
|
||||
if [ -f /etc/nginx/sites-enabled/default ]; then
|
||||
rm /etc/nginx/sites-enabled/default
|
||||
fi
|
||||
|
||||
if [ ! -d $CRYPTPAD_DIR/customize/api ]; then
|
||||
mkdir -p $CRYPTPAD_DIR/customize/api
|
||||
|
@ -391,7 +446,7 @@ function show_desktop_icons {
|
|||
echo "Comment[it]=Crea una nuova identità" >> /home/$MY_USERNAME/Desktop/new_identity.desktop
|
||||
echo "Comment[ru]=Создайте новое удостоверение личности" >> /home/$MY_USERNAME/Desktop/new_identity.desktop
|
||||
echo "Comment[zh]=创建一个新的身份" >> /home/$MY_USERNAME/Desktop/new_identity.desktop
|
||||
echo "Exec=mate-terminal --full-screen -e ${PROJECT_NAME}-mesh-reset" >> /home/$MY_USERNAME/Desktop/new_identity.desktop
|
||||
echo "Exec=${PROJECT_NAME}-mesh-reset" >> /home/$MY_USERNAME/Desktop/new_identity.desktop
|
||||
echo "Icon=/usr/share/${PROJECT_NAME}/avatars/icon_new_identity.png" >> /home/$MY_USERNAME/Desktop/new_identity.desktop
|
||||
echo 'Terminal=false' >> /home/$MY_USERNAME/Desktop/new_identity.desktop
|
||||
echo 'Categories=Application;' >> /home/$MY_USERNAME/Desktop/new_identity.desktop
|
||||
|
@ -425,6 +480,324 @@ function show_desktop_icons {
|
|||
echo 'Terminal=false' >> /home/$MY_USERNAME/Desktop/social.desktop
|
||||
echo 'Categories=Application;' >> /home/$MY_USERNAME/Desktop/social.desktop
|
||||
|
||||
cp /root/${PROJECT_NAME}/img/icon_kdenlive.png /usr/share/${PROJECT_NAME}/avatars/icon_kdenlive.png
|
||||
echo '#!/usr/bin/env xdg-open' > /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo '# KDE Config File' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo '' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo '[Desktop Entry]' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name=Video Editor' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[ast]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[bs]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[ca]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[ca@valencia]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[cs]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[da]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[de]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[el]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[en_GB]=Video Editor' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[es]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[et]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[fi]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[fr]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[ga]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[gl]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[hu]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[it]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[ja]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[km]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[lt]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[lv]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[mr]=के-डि-एनलाइव्ह' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[nb]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[nds]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[nl]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[nn]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[pl]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[pt]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[pt_BR]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[ro]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[ru]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[sk]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[sl]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[sv]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[tr]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[ug]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[uk]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[x-test]=xxKdenlivexx' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[zh_CN]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Name[zh_TW]=Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName=Video Editor' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[ar]=محرّر فيديوهات' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[ast]=Editor de videu' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[bs]=Video uređivač' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[ca]=Editor de vídeo' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[ca@valencia]=Editor de vídeo' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[cs]=Editor videí' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[da]=Videoredigering' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[de]=Video-Editor' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[el]=Επεξεργαστής βίντεο' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[en_GB]=Video Editor' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[es]=Editor de video' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[et]=Videoredaktor' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[fi]=Videomuokkain' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[fr]=Éditeur vidéo' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[ga]=Eagarthóir Físe' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[gl]=Editor de vídeo' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[hu]=Videoszerkesztő' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[it]=Editor video' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[ja]=ビデオエディタ' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[km]=កម្មវិធីកែសម្រួលវីដេអូ' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[lt]=Video redaktorius' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[lv]=Video redaktors' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[mr]=व्हिडीओ संपादक' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[nb]=Videoredigeringsprogram' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[nl]=Video-bewerker' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[nn]=Videoredigering' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[pl]=Edytor wideo' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[pt]=Editor de Víde' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[pt_BR]=Editor de Vídeo' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[ro]=Redactor de imagini' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[ru]=Видеоредактор' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[sk]=Editor videa' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[sl]=Urejevalnik videa' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[sv]=Videoeditor' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[tr]=Video Düzenleyici' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[uk]=Відеоредактор' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[x-test]=xxVideo Editorxx' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[zh_CN]=视频编辑器' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'GenericName[zh_TW]=影像編輯器' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment=Nonlinear video editor for KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[ar]=محرّر فيديوهات غير خطّيّ لكدي' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[ast]=Editor de videu non llinial pa KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[bs]=Nelinearni video uređivač za KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[ca]=Editor de vídeo no lineal per al KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[ca@valencia]=Editor de vídeo no lineal per al KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[cs]=Nelineární editor videí pro KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[da]=Ikke-lineær videoredigering til KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[de]=Nichtlinearer Video-Editor für KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[el]=Μη γραμμικός επεξεργαστής βίντεο για το KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[en_GB]=Nonlinear video editor for KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[es]=Editor no lineal de video para KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[et]=KDE mittelineaarne videoredaktor' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[fi]=Epälineaarinen videomuokkain KDE:lle' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[fr]=Éditeur vidéo non linéaire pour KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[gl]=Editor de vídeo non linear para KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[hu]=Nemlineáris videoszerkesztő a KDE-hez' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[it]=Editor di video non lineare per KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[ja]=KDE 向けノンリニアビデオエディタ' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[km]=កម្មវិធីកែសម្រួលវីដេអូមិនលីនេអ៊ែរសម្រាប់ KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[lt]=Nelinijinis veido redaktorius skirtas KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[lv]=Nelineārais video redaktors KDE videi' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[mr]=केडीई करिता अरेषीय व्हिडीओ संपादक' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[nb]=Videoredigeringsprogram for KDE med dataklipping' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[nl]=Niet-lineaire video-bewerker voor KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[nn]=Program for ikkje-lineær videoredigering' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[pl]=Nieliniowy edytor wideo dla KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[pt]=Editor de vídeo não-linear para o KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[pt_BR]=Editor de vídeo não-linear para o KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[ro]=Redactor de imagini neliniar pentru KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[ru]=Нелинейный видеоредактор от KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[sk]=Nelineárny editor videa pre KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[sl]=Ne-linearni urejevalnik videa za KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[sv]=Icke-linjär videoeditor för KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[tr]=KDE için doğrusal olmayan video düzenleyici' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[ug]=KDE ئۈچۈن سىزىقسىز سىن تەھرىرلىگۈچ' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[uk]=Нелінійний редактор відео для KDE' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[x-test]=xxNonlinear video editor for KDExx' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[zh_CN]=KDE 的非线性视频编辑器' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Comment[zh_TW]=KDE 上的非線性影像編輯器' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Type=Application' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Exec=kdenlive %U' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo "Icon=/usr/share/${PROJECT_NAME}/avatars/icon_kdenlive.png" >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'X-DocPath=kdenlive/index.html' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'X-DocPath[cs]=http://cs.wikibooks.org/wiki/Kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Terminal=false' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'MimeType=application/x-kdenlive;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Categories=Qt;KDE;AudioVideo;AudioVideoEditing;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords=editing;video;audio;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[ca]=edició;vídeo;àudio;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[ca@valencia]=edició;vídeo;àudio;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[da]=redigering;video;lyd;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[de]=Editing;Bearbeitung;Schnitt;Videoschnitt;Video;Audio;MLT;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[en_GB]=editing;video;audio;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[es]=edición;video;audio;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[et]=redigeerimine;muutmine;video;audio;heli;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[fi]=editing;video;audio;mlt;kde;editointi;ääni;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[fr]=montage;vidéo;audio;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[gl]=editing;edición;video;vídeo;audio;son;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[it]=editing;video;audio;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[nl]=bewerken;video;audio;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[nn]=redigering;video;lyd;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[pl]=edytowanie;video;wideo;filmy;audio;dźwięk;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[pt]=edição;vídeo;áudio;MLT;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[pt_BR]=edição;vídeo;áudio;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[sk]=editovanie;video;audio;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[sl]=urejanje;video;zvok;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[sv]=redigering;video;ljud;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[uk]=editing;video;audio;mlt;kde;редагування;відео;звук;аудіо;млт;кдє;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[x-test]=xxeditingxx;xxvideoxx;xxaudioxx;xxmltxx;xxkdexx;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[zh_CN]=editing;video;audio;mlt;kde;编辑;视频;音频;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'Keywords[zh_TW]=editing;video;audio;mlt;kde;' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
echo 'X-DBUS-ServiceName=org.kde.kdenlive' >> /home/$MY_USERNAME/Desktop/kdenlive.desktop
|
||||
|
||||
cp /root/${PROJECT_NAME}/img/icon_photos.png /usr/share/${PROJECT_NAME}/avatars/icon_photos.png
|
||||
echo '#!/usr/bin/env xdg-open' > /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo '[Desktop Entry]' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Version=1.0' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[ar]=شُتْوِل' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[as]=Photos' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[bn_IN]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[bs]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[ca]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[cs]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[da]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[de]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[el]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[en_GB]=Photos' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[es]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[et]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[eu]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[fi]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[fr]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[gd]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[gl]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[gu]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[he]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[hi]=शॉटवेल' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[hr]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[hu]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[id]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[it]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[ja]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[kk]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[kn]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[ko]=샷웰' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[lt]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[lv]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[ml]=ഷോട്ട്വെല്' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[mr]=शॉटवेल' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[nb]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[nl]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[oc]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[or]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[pa]=ਸ਼ੂਟਵੈੱਲ' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[pl]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[pt]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[pt_BR]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[ro]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[ru]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[sk]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[sl]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[sr]=Фото-бунар' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[sr@latin]=Foto-bunar' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[sv]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[ta]=ஷாட்வெல்' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[te]=షాట్వెల్' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[tr]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[uk]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[vi]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[zh_CN]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[zh_HK]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name[zh_TW]=Shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Name=Photos' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[af]=Foto Organiseerder' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[ar]=مدير الصور' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo "GenericName[as]=ফ'টো ব্যৱস্থাপক" >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[ast]=Xestor de semeyes' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[bg]=Мениджър на снимки' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[bn]=ফটো ম্যানেজার' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[bn_IN]=ছবি পরিচালন ব্যবস্থা' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[bs]=Organizator Slika' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[ca]=Gestor fotogràfic' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[cs]=Správce fotografií' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[da]=Billedhåndtering' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[de]=Fotoverwaltung' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[el]=Διαχειριστής εικόνων' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[en_GB]=Photo Manager' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[es]=Gestor de fotos' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[et]=Fotohaldur' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[eu]=Argazki-kudeatzailea' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[fi]=Valokuvien hallinta' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[fr]=Gestionnaire de photos' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[gd]=Manaidsear dhealbhan' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[gl]=Xestor de fotos' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[gu]=ફોટો સંચાલક' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[he]=מנהל תמונות' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[hi]=फ़ोटो प्रबंधक' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[hr]=Upravitelj fotografija' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[hu]=Fényképkezelő' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[ia]=Administrator de photos' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[id]=Manajer Foto' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[it]=Gestore di fotografie' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[ja]=Shotwell 写真管理ツール' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[kk]=Фотосуреттерді басқару қолданбасы' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[km]=កម្មវិធីគ្រប់គ្រងរូបថត' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[kn]=ಫೋಟೊ ವ್ಯವಸ್ಥಾಪಕ' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[ko]=사진 관리자' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[ky]=Фотография менеджери' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[lt]=Nuotraukų tvarkytuvė' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[lv]=Fotogrāfiju pārvaldnieks' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[mk]=Менаџер на фотографии' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[ml]=ചിത്ര പാലകന്' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[mr]=छायाचित्र व्यवस्थापक' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[nb]=Fotobehandler' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[nl]=Fotobeheerder' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[oc]=Gestionari de fòtos' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[or]=ଫୋଟୋ ପରିଚାଳକ' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[pa]=ਫੋਟੋ ਮੈਨੇਜਰ' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[pl]=Menedżer zdjęć' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[pt]=Gestor de fotografias' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[pt_BR]=Organizador de fotos' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[ro]=Administrator de fotografii' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[ru]=Менеджер фотографий' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[sk]=Správca fotografií' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[sl]=Upravljalnik fotografij' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[sr]=Управник фотографија' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[sr@latin]=Upravnik fotografija' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[sv]=Bildhanterare' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[ta]=புகைப்பட அடுக்கு' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[te]=ఫోటో నిర్వాహకం' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[th]=ตัวจัดการภาพถ่าย' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[tr]=Fotoğraf Yöneticisi' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[uk]=Впорядник фотографій' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[vi]=Trình quản lý ảnh' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[zh_CN]=照片管理器' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[zh_HK]=相片管理員' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName[zh_TW]=相片管理員' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'GenericName=Photo Manager' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[cs]=Roztřiďte si své fotografie' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[da]=Organisér dine billeder' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[de]=Ihre Fotos organisieren' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[es]=Organice sus fotos' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[fi]=Hallitse kuviasi' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[gd]=Cuir rian air na dealbhan agad' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[he]=ארגון התמונות שלך' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[hr]=Organizirajte svoje fotografije' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[hu]=Rendszerezze a fényképeit' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[id]=Organisasikan foto Anda' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[kk]=Фотосуреттеріңізді реттеңіз' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[kn]=ನಿಮ್ಮ ಚಿತ್ರಗಳನ್ನು ವ್ಯವಸ್ಥಿತವಾಗಿ ಜೋಡಿಸಿ' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[ko]=사진을 정리합니다.' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[lv]=Organizē savas fotogrāfijas' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[pl]=Organizowanie zdjęć' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[pt]=Organize as suas fotografias' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[pt_BR]=Organize suas fotos' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[sk]=Organizuje vaše fotografie' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[sr]=Организујте ваше фотографије' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[sr@latin]=Organizujte vaše fotografije' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[sv]=Organisera dina bilder' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment[uk]=Впорядкуйте ваші фотографії' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Comment=Organize your photos' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo "Icon=/usr/share/${PROJECT_NAME}/avatars/icon_photos.png" >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Exec=shotwell %U' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Terminal=false' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Type=Application' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'MimeType=x-content/image-dcf;' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'Categories=Graphics;Photography;GNOME;GTK;' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'X-GIO-NoFuse=true' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'X-GNOME-Gettext-Domain=shotwell' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
echo 'X-GNOME-FullName=Shotwell Photo Manager' >> /home/$MY_USERNAME/Desktop/photos.desktop
|
||||
|
||||
#echo '[Desktop Entry]' > /home/$MY_USERNAME/Desktop/audio.desktop
|
||||
#echo 'Name=Audio/Music' >> /home/$MY_USERNAME/Desktop/audio.desktop
|
||||
#echo 'Type=Application' >> /home/$MY_USERNAME/Desktop/audio.desktop
|
||||
|
@ -680,7 +1053,11 @@ function setup_ipfs {
|
|||
TOX_ID='none'
|
||||
if [ -d /home/$MY_USERNAME/Desktop ]; then
|
||||
if [ ! -d /home/$MY_USERNAME/Public ]; then
|
||||
mkdir /home/$MY_USERNAME/Public
|
||||
mkdir -p /home/$MY_USERNAME/Public/Videos
|
||||
mkdir -p /home/$MY_USERNAME/Public/Music
|
||||
mkdir -p /home/$MY_USERNAME/Public/Podcasts
|
||||
mkdir -p /home/$MY_USERNAME/Public/Documents
|
||||
mkdir -p /home/$MY_USERNAME/Public/Pictures
|
||||
echo $'Files within this directory will be publicly visible on the network' > /home/$MY_USERNAME/Public/README.txt
|
||||
chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Public
|
||||
ln -s /home/$MY_USERNAME/Public /home/$MY_USERNAME/Desktop/Public
|
||||
|
@ -915,10 +1292,11 @@ function initialise_scuttlebot_pub {
|
|||
systemctl daemon-reload
|
||||
systemctl start scuttlebot.service
|
||||
|
||||
sleep 3
|
||||
sleep 10
|
||||
|
||||
if [ ! -d /etc/scuttlebot/.ssb ]; then
|
||||
echo $'Scuttlebot config not generated' >> /var/log/${PROJECT_NAME}.log
|
||||
systemctl status scuttlebot -l >> /var/log/${PROJECT_NAME}.log
|
||||
exit 73528
|
||||
fi
|
||||
|
||||
|
@ -943,6 +1321,7 @@ function initialise_scuttlebot_pub {
|
|||
echo '}' >> /etc/scuttlebot/.ssb/config
|
||||
chown scuttlebot:scuttlebot /etc/scuttlebot/.ssb/config
|
||||
systemctl restart scuttlebot.service
|
||||
echo "scuttlebot pub started" >> /var/log/${PROJECT_NAME}.log
|
||||
}
|
||||
|
||||
# whether to reset the identity
|
||||
|
@ -1038,6 +1417,7 @@ if [ -f $MESH_INSTALL_SETUP ]; then
|
|||
initialise_scuttlebot_pub
|
||||
setup_ipfs
|
||||
enable_cryptpad
|
||||
enable_peertube
|
||||
mesh_amnesic
|
||||
make_root_read_only
|
||||
|
||||
|
|
|
@ -71,6 +71,8 @@ TOX_PORT=33445
|
|||
TRACKER_PORT=6969
|
||||
LIBREVAULT_PORT=42345
|
||||
TAHOELAFS_PORT=50213
|
||||
GIT_SSB_PORT=7718
|
||||
NGINX_GIT_SSB_PORT=7719
|
||||
|
||||
# Ethernet bridge definition (bridged to bat0)
|
||||
BRIDGE=br-mesh
|
||||
|
@ -178,6 +180,7 @@ function stop {
|
|||
iptables -D INPUT -p udp --dport $LIBREVAULT_PORT -j ACCEPT
|
||||
iptables -D INPUT -p tcp --dport $TAHOELAFS_PORT -j ACCEPT
|
||||
# SSB/Scuttlebot/Patchwork
|
||||
iptables -D INPUT -p tcp --dport $GIT_SSB_PORT -j ACCEPT
|
||||
iptables -D INPUT -p udp --dport 8008 -j ACCEPT
|
||||
iptables -D INPUT -p tcp --dport 8008 -j ACCEPT
|
||||
iptables -D INPUT -p udp --dport 8010 -j ACCEPT
|
||||
|
@ -450,12 +453,14 @@ function start {
|
|||
iptables -A INPUT -p udp --dport $LIBREVAULT_PORT -j ACCEPT
|
||||
iptables -A INPUT -p tcp --dport $TAHOELAFS_PORT -j ACCEPT
|
||||
# SSB/Scuttlebot/Patchwork
|
||||
iptables -A INPUT -p tcp --dport $GIT_SSB_PORT -j ACCEPT
|
||||
iptables -A INPUT -p udp --dport 8008 -j ACCEPT
|
||||
iptables -A INPUT -p tcp --dport 8008 -j ACCEPT
|
||||
iptables -A INPUT -p udp --dport 8010 -j ACCEPT
|
||||
iptables -A INPUT -p tcp --dport 8010 -j ACCEPT
|
||||
if [[ "$ethernet_connected" != "0" ]]; then
|
||||
# vpn over the internet
|
||||
# Note: the vpn firewall settings are needed in order for Patchwork
|
||||
# to discover local peers
|
||||
iptables -A INPUT -p tcp --dport 653 -j ACCEPT
|
||||
iptables -A INPUT -p udp --dport 653 -j ACCEPT
|
||||
iptables -A INPUT -i ${EIFACE} -m state --state NEW -p tcp --dport 1194 -j ACCEPT
|
||||
|
@ -469,7 +474,6 @@ function start {
|
|||
sed -i 's|# net.ipv4.ip_forward|net.ipv4.ip_forward|g' /etc/sysctl.conf
|
||||
sed -i 's|#net.ipv4.ip_forward|net.ipv4.ip_forward|g' /etc/sysctl.conf
|
||||
sed -i 's|net.ipv4.ip_forward.*|net.ipv4.ip_forward=1|g' /etc/sysctl.conf
|
||||
fi
|
||||
|
||||
systemctl restart avahi-daemon
|
||||
|
||||
|
|
|
@ -41,6 +41,13 @@ CURRENT_BLOG_INDEX=/home/$USER/.blog-index
|
|||
BLOG_EDITOR='pluma'
|
||||
DEFAULT_BLOG_TITLE=$"Freedombone Blog"
|
||||
|
||||
function remove_bad_blog_links {
|
||||
current_theme=$1
|
||||
if [ -f $BLOG_PATH/themes/$current_theme/static/css/style.css ]; then
|
||||
sed -i '/googleapi/d' $BLOG_PATH/themes/$current_theme/static/css/style.css
|
||||
fi
|
||||
}
|
||||
|
||||
function ipfs_publish {
|
||||
DIR_TO_CHECK=/home/$USER/Public
|
||||
if [ ! -d $DIR_TO_CHECK ]; then
|
||||
|
@ -146,13 +153,8 @@ function delete_blog {
|
|||
return
|
||||
fi
|
||||
|
||||
dialog --title $"Delete the previous blog entry" \
|
||||
--backtitle $"Freedombone Mesh" \
|
||||
--defaultno \
|
||||
--yesno $"\nAre you sure that you wish to delete the previous blog entry?" 8 60
|
||||
sel=$?
|
||||
case $sel in
|
||||
0) rm $LAST_BLOG_ENTRY
|
||||
if ! zenity --question --title=$'Delete the previous blog entry' --text=$"\nAre you sure that you wish to delete the previous blog entry?" --ok-label=No --cancel-label=Yes --width=300; then
|
||||
rm $LAST_BLOG_ENTRY
|
||||
if [ $CURRENT_INDEX -gt 0 ]; then
|
||||
CURRENT_INDEX=$PREVIOUS_INDEX
|
||||
echo "$CURRENT_INDEX" > $CURRENT_BLOG_INDEX
|
||||
|
@ -160,8 +162,7 @@ function delete_blog {
|
|||
rm -f $CURRENT_BLOG_INDEX
|
||||
fi
|
||||
regenerate_blog
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
function change_theme {
|
||||
|
@ -171,48 +172,41 @@ function change_theme {
|
|||
THEMES+=("$THEME_NAME")
|
||||
done
|
||||
|
||||
themelist=""
|
||||
n=1
|
||||
theme_index=0
|
||||
curr_theme_index=
|
||||
if [ -f /home/$USER/.blog-theme-index ]; then
|
||||
curr_theme_index=$(cat /home/$USER/.blog-theme-index)
|
||||
fi
|
||||
if [ -f /tmp/.blog-themes ]; then
|
||||
rm /tmp/.blog-themes
|
||||
fi
|
||||
for a in "${THEMES[@]}"
|
||||
do
|
||||
is_selected='off'
|
||||
if [ $curr_theme_index ]; then
|
||||
if [ $n -eq $curr_theme_index ]; then
|
||||
is_selected='on'
|
||||
fi
|
||||
else
|
||||
if [[ "$a" == 'nice-blog' ]]; then
|
||||
is_selected='on'
|
||||
fi
|
||||
fi
|
||||
|
||||
themelist="$themelist $n $a $is_selected"
|
||||
echo "$n $a" >> /tmp/.blog-themes
|
||||
n=$[n+1]
|
||||
theme_index=$[theme_index+1]
|
||||
done
|
||||
|
||||
data=$(tempfile 2>/dev/null)
|
||||
trap "rm -f $data" 0 1 2 5 15
|
||||
dialog --backtitle $"Freedombone Mesh" \
|
||||
--title $"Select Blog Theme" \
|
||||
--radiolist $'Choose:' \
|
||||
80 40 20 $themelist 2> $data
|
||||
CHOSEN_THEME_INDEX=$(
|
||||
cat /tmp/.blog-themes | \
|
||||
awk -F ' ' '{
|
||||
for(i=1;i<=NF;i++){
|
||||
print $i;
|
||||
}
|
||||
}' | \
|
||||
zenity --list \
|
||||
--title=$'Select Blog Theme' \
|
||||
--column=$'Index' --column=$'Theme' \
|
||||
--print-column=1 --hide-column=1 --width=300 --height=400)
|
||||
rm /tmp/.blog-themes
|
||||
if [ ! $CHOSEN_THEME_INDEX ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sel=$?
|
||||
case $sel in
|
||||
1) exit 1;;
|
||||
255) exit 1;;
|
||||
esac
|
||||
CHOSEN_THEME_INDEX=$(cat $data)
|
||||
echo "$CHOSEN_THEME_INDEX" > /home/$USER/.blog-theme-index
|
||||
CHOSEN_THEME_INDEX=$((CHOSEN_THEME_INDEX - 1))
|
||||
|
||||
CHOSEN_THEME=${THEMES[$CHOSEN_THEME_INDEX]}
|
||||
remove_bad_blog_links $CHOSEN_THEME
|
||||
if grep -q "THEME=" $BLOG_PATH/pelicanconf.py; then
|
||||
sed -i "s|THEME=.*|THEME='themes/${CHOSEN_THEME}'|g" $BLOG_PATH/pelicanconf.py
|
||||
else
|
||||
|
@ -222,29 +216,18 @@ function change_theme {
|
|||
}
|
||||
|
||||
function menu_blog {
|
||||
data=$(tempfile 2>/dev/null)
|
||||
trap "rm -f $data" 0 1 2 5 15
|
||||
dialog --backtitle $"Freedombone Mesh" \
|
||||
--title $"Blogging" \
|
||||
--radiolist $"Choose an operation:" 19 50 12 \
|
||||
1 $"View a blog" on \
|
||||
2 $"New blog entry" off \
|
||||
3 $"Edit the previous blog entry" off \
|
||||
4 $"Delete the previous blog entry" off \
|
||||
5 $"Change theme" off \
|
||||
6 $"Exit" off 2> $data
|
||||
data=$(zenity --list 1 $"View a blog" 2 $"New blog entry" 3 $"Edit the previous blog entry" 4 $"Delete the previous blog entry" 5 $"Change theme" --column="id" --title $"Blogging" --column=$"Choose an operation:" --hide-column=1 --print-column=1 --height=250)
|
||||
sel=$?
|
||||
case $sel in
|
||||
1) exit 1;;
|
||||
255) exit 1;;
|
||||
esac
|
||||
case $(cat $data) in
|
||||
case $data in
|
||||
1) view_blog;;
|
||||
2) new_blog;;
|
||||
3) edit_blog;;
|
||||
4) delete_blog;;
|
||||
5) change_theme;;
|
||||
6) break;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
|
|
@ -152,8 +152,7 @@ function mesh_setup_vpn {
|
|||
chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/vpn.tar.gz
|
||||
|
||||
if [ -f vpn.tar.gz ]; then
|
||||
dialog --title $"Generate VPN client keys" \
|
||||
--msgbox $"\nNew VPN client keys have been generated in the /home/fbone directory.\n\nYou can find it by selecting \"Places\" then \"Home Directory\" on the top menu bar. Transmit the vpn.tar.gz file to whoever is running the other mesh network so that they can connect to yours.\n\nThey should uncompress vpn.tar.gz to their /home/fbone directory, forward port $VPN_MESH_TLS_PORT then connect using your IP address or domain name." 15 70
|
||||
zenity --info --title $"Generate VPN client keys" --text $"\nNew VPN client keys have been generated in the /home/fbone directory.\n\nYou can find it by selecting \"Places\" then \"Home Directory\" on the top menu bar. Transmit the vpn.tar.gz file to whoever is running the other mesh network so that they can connect to yours.\n\nThey should uncompress vpn.tar.gz to their /home/fbone directory, forward port $VPN_MESH_TLS_PORT then connect using your IP address or domain name." --width 600
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -164,15 +163,11 @@ function connect_to_mesh {
|
|||
connect_title=$"Connect from $(cat $HIDDEN_SERVICE_PATH) to another mesh network"
|
||||
fi
|
||||
|
||||
data=$(tempfile 2>/dev/null)
|
||||
trap "rm -f $data" 0 1 2 5 15
|
||||
dialog --title "$connect_title" \
|
||||
--backtitle $"Freedombone Mesh" \
|
||||
--inputbox $'Enter the IP address or domain name of the other mesh.' 10 60 2>$data
|
||||
data=$(zenity --entry --title "$connect_title" --text $'Enter the IP address or domain name of the other mesh')
|
||||
sel=$?
|
||||
case $sel in
|
||||
0)
|
||||
ip_or_domain=$(<$data)
|
||||
ip_or_domain="$data"
|
||||
if [ ${#ip_or_domain} -gt 1 ]; then
|
||||
if [[ "$ip_or_domain" == *'.'* ]]; then
|
||||
|
||||
|
@ -188,9 +183,7 @@ function connect_to_mesh {
|
|||
fi
|
||||
|
||||
if [ $connect_failed ]; then
|
||||
dialog --title $"Connect to another mesh network" \
|
||||
--msgbox $"\nObtain the vpn.tar.gz file from the other mesh administrator, uncompress it into the /home/fbone directory and also forwarded port $VPN_MESH_TLS_PORT from your internet router to this system." 10 50
|
||||
rm $data
|
||||
zenity --info --title $"Connect to another mesh network" --text $"\nObtain the vpn.tar.gz file from the other mesh administrator, uncompress it into the /home/fbone directory and also forwarded port $VPN_MESH_TLS_PORT from your internet router to this system." --width 400
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
@ -204,27 +197,17 @@ function connect_to_mesh {
|
|||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
rm $data
|
||||
}
|
||||
|
||||
data=$(tempfile 2>/dev/null)
|
||||
trap "rm -f $data" 0 1 2 5 15
|
||||
dialog --backtitle $"Freedombone Mesh" \
|
||||
--title $"Connect to another mesh network" \
|
||||
--radiolist $"Choose an operation:" 10 75 2 \
|
||||
1 $"Connect to another mesh network" on \
|
||||
2 $"Generate VPN keys for another mesh network to connect to me" off 2> $data
|
||||
data=$(zenity --list 1 $"Connect to another mesh network" 2 $"Generate VPN keys for another mesh network to connect to me" --column="id" --title $"Connect to another mesh network" --column=$"Choose an operation:" --hide-column=1 --print-column=1 --width=500 --height=100)
|
||||
sel=$?
|
||||
case $sel in
|
||||
1) exit 1;;
|
||||
255) exit 1;;
|
||||
esac
|
||||
case $(cat $data) in
|
||||
1) rm $data
|
||||
connect_to_mesh;;
|
||||
2) rm $data
|
||||
mesh_setup_vpn;;
|
||||
case $data in
|
||||
1) connect_to_mesh;;
|
||||
2) mesh_setup_vpn;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -33,7 +33,7 @@ export TEXTDOMAINDIR="/usr/share/locale"
|
|||
|
||||
MESH_INSTALL_COMPLETED=/root/.mesh_setup_completed
|
||||
|
||||
if ! zenity --question --title='New Identity' --text="Do you want to reset your identity? This will reset ALL data for this peer, and you will not be able to recover it." --ok-label=No --cancel-label=Yes --width=300; then
|
||||
if ! zenity --question --title=$'New Identity' --text=$"Do you want to reset your identity? This will reset ALL data for this peer, and you will not be able to recover it." --ok-label=No --cancel-label=Yes --width=300; then
|
||||
sudo batman stop
|
||||
sudo pkill qtox
|
||||
sudo pkill firefox
|
||||
|
|
|
@ -34,8 +34,8 @@ export TEXTDOMAINDIR="/usr/share/locale"
|
|||
IPFS_URL='http://127.0.0.1:8080/ipns'
|
||||
|
||||
# The browser application to use
|
||||
BROWSER=midori
|
||||
BROWSER_OPTIONS='-p'
|
||||
BROWSER=firefox
|
||||
BROWSER_OPTIONS='-url'
|
||||
|
||||
# An optional suffix to be appended to the URL
|
||||
SUFFIX=$1
|
||||
|
@ -49,15 +49,15 @@ if [ ! -f $USERS_FILE ]; then
|
|||
exit 0
|
||||
fi
|
||||
|
||||
data=$(tempfile 2>/dev/null)
|
||||
trap "rm -f $data" 0 1 2 5 15
|
||||
dialog --title $"Visit IPFS site" \
|
||||
--backtitle $"Freedombone mesh" \
|
||||
--inputbox $"Enter the username or Tox ID for the site you wish to visit" 8 70 2>$data
|
||||
sel=$?
|
||||
case $sel in
|
||||
USERS_FILE_LINES=$(wc -l $USERS_FILE | awk -F ' ' '{print $1}')
|
||||
|
||||
if [ $USERS_FILE_LINES -gt 200 ]; then
|
||||
# If there are more than a Dunbar number of peers then ask for the peer name or ID
|
||||
data=$(zenity --entry --title="Visit IPFS site" --text="Enter the username or Tox ID for the site you wish to visit")
|
||||
sel=$?
|
||||
case $sel in
|
||||
0)
|
||||
TOX_USERNAME_OR_ID=$(<$data)
|
||||
TOX_USERNAME_OR_ID="$data"
|
||||
if [ ${#TOX_USERNAME_OR_ID} -gt 0 ]; then
|
||||
if ! grep -q "$TOX_USERNAME_OR_ID" $USERS_FILE; then
|
||||
TOX_ID="$TOX_USERNAME_OR_ID"
|
||||
|
@ -67,14 +67,10 @@ case $sel in
|
|||
|
||||
if [ ${#TOX_ID} -gt 5 ]; then
|
||||
if ! grep -q "$TOX_ID" $IPFS_USERS_FILE; then
|
||||
dialog --title $"Visit IPFS site" \
|
||||
--backtitle $"Freedombone mesh" \
|
||||
--msgbox $"An IPFS site was not found for the user '$TOX_USERNAME_OR_ID'" 8 60
|
||||
zenity --info --title $"Visit a site" --text $"An IPFS site was not found for the user '$TOX_USERNAME_OR_ID'" --width 500
|
||||
exit 3
|
||||
fi
|
||||
IPFS_FULL_URL=${IPFS_URL}/$(cat "$IPFS_USERS_FILE" | grep $TOX_ID | head -n 1 | awk -F ':' '{print $2}')
|
||||
clear
|
||||
echo $'Opening browser. Please wait...'
|
||||
pkill $BROWSER
|
||||
setsid sh -c "$BROWSER $BROWSER_OPTIONS $IPFS_FULL_URL$SUFFIX" > /dev/null 2>&1 < /dev/null &
|
||||
|
||||
|
@ -85,6 +81,29 @@ case $sel in
|
|||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
esac
|
||||
else
|
||||
# If there are a relatively small number of users then choose from a list
|
||||
TOX_ID=$(
|
||||
cat $USERS_FILE | \
|
||||
awk -F ' ' '{
|
||||
for(i=1;i<=NF;i++){
|
||||
print $i;
|
||||
}
|
||||
}' | \
|
||||
zenity --list \
|
||||
--title='Visit the site of another user' \
|
||||
--column='Username' --column='Tox ID' \
|
||||
--print-column=2 --hide-column=2 --width=300 --height=400)
|
||||
if [ ! $TOX_ID ]; then
|
||||
exit 0
|
||||
fi
|
||||
IPFS_FULL_URL=${IPFS_URL}/$(cat "$IPFS_USERS_FILE" | grep $TOX_ID | head -n 1 | awk -F ':' '{print $2}')
|
||||
pkill $BROWSER
|
||||
setsid sh -c "$BROWSER $BROWSER_OPTIONS $IPFS_FULL_URL$SUFFIX" > /dev/null 2>&1 < /dev/null &
|
||||
|
||||
# Need to wait a while for the browser to begin opening
|
||||
sleep 3
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -127,6 +127,35 @@ function mesh_install_nodejs {
|
|||
$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
|
||||
|
||||
# deliberate second install of npm
|
||||
$mesh_install_nodejs_prefix npm install --arch=$NPM_ARCH -g npm@${NPM_VERSION} --save
|
||||
if [ -f $rootdir/usr/local/bin/npm ]; then
|
||||
cp $rootdir/usr/local/bin/npm /usr/bin/npm
|
||||
fi
|
||||
cp $rootdir/usr/bin/npm $rootdir/root/npm
|
||||
|
||||
# check the version numbers
|
||||
cat <<EOF > $rootdir/usr/bin/test_nodejs_install
|
||||
#!/bin/bash
|
||||
node_version=\$(node -v)
|
||||
if [[ "\$node_version" != "v${NODEJS_VERSION}" ]]; then
|
||||
echo $"nodejs version expected to be ${NODEJS_VERSION} but found \$node_version"
|
||||
exit 1
|
||||
fi
|
||||
npm_version=\$(npm -v)
|
||||
if [[ "\$npm_version" != "${NPM_VERSION}" ]]; then
|
||||
echo $"npm version expected to be ${NPM_VERSION} but found \$npm_version"
|
||||
exit 2
|
||||
fi
|
||||
EOF
|
||||
chmod +x $rootdir/usr/bin/test_nodejs_install
|
||||
chroot "$rootdir" /usr/bin/test_nodejs_install
|
||||
if [ ! "$?" = "0" ]; then
|
||||
echo $"nodejs version numbers did not match. Architecture is $NPM_ARCH."
|
||||
exit 76835282
|
||||
fi
|
||||
rm $rootdir/usr/bin/test_nodejs_install
|
||||
}
|
||||
|
||||
function remove_nodejs {
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
# Set this when calling backup and restore commands
|
||||
USE_POSTGRESQL=
|
||||
POSTGRESQL_PACKAGES='postgresql-9.6 postgresql-contrib-9.6 postgresql-client'
|
||||
|
||||
function store_original_postgresql_password {
|
||||
if [ ! -f /root/.postgresqloriginal ]; then
|
||||
|
@ -48,7 +49,26 @@ function get_postgresql_password {
|
|||
fi
|
||||
}
|
||||
|
||||
function mesh_install_postgresql {
|
||||
chroot "$rootdir" apt-get -yq install $POSTGRESQL_PACKAGES
|
||||
|
||||
if [ ! -d $rootdir/etc/postgresql ]; then
|
||||
echo $"ERROR: postgresql does not appear to have installed."
|
||||
exit 78352
|
||||
fi
|
||||
|
||||
if [ ! -f $rootdir/usr/bin/psql ]; then
|
||||
echo $"ERROR: psql command does not appear to have installed."
|
||||
exit 835290
|
||||
fi
|
||||
}
|
||||
|
||||
function install_postgresql {
|
||||
if [[ $VARIANT == "mesh"* ]]; then
|
||||
mesh_install_postgresql
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ $(is_completed $FUNCNAME) == "1" ]]; then
|
||||
return
|
||||
fi
|
||||
|
@ -64,7 +84,7 @@ function install_postgresql {
|
|||
fi
|
||||
${PROJECT_NAME}-pass -u root -a postgresql -p "$POSTGRESQL_PASSWORD"
|
||||
|
||||
apt-get -yq install postgresql-9.6 postgresql-contrib-9.6 postgresql-client
|
||||
apt-get -yq install $POSTGRESQL_PACKAGES
|
||||
apt-get -yq remove --purge apache2-bin*
|
||||
if [ -d /etc/apache2 ]; then
|
||||
rm -rf /etc/apache2
|
||||
|
@ -72,12 +92,12 @@ function install_postgresql {
|
|||
fi
|
||||
|
||||
if [ ! -d /etc/postgresql ]; then
|
||||
echo $"ERROR: postgresql does not appear to have installed. $CHECK_MESSAGE"
|
||||
echo $"ERROR: postgresql does not appear to have installed."
|
||||
exit 78352
|
||||
fi
|
||||
|
||||
if [ ! -f /usr/bin/psql ]; then
|
||||
echo $"ERROR: psql command does not appear to have installed. $CHECK_MESSAGE"
|
||||
echo $"ERROR: psql command does not appear to have installed."
|
||||
exit 835290
|
||||
fi
|
||||
|
||||
|
|
|
@ -68,6 +68,25 @@ function ipfs_publish {
|
|||
|
||||
NEW_STAT=$(stat -t $DIR_TO_CHECK)
|
||||
|
||||
# include some subdirectories
|
||||
for dir in $DIR_TO_CHECK/*/
|
||||
do
|
||||
REALLY_NEW_STAT="$NEW_STAT$(stat -t $dir)"
|
||||
NEW_STAT="$REALLY_NEW_STAT"
|
||||
|
||||
for dir2 in "$dir"/*/
|
||||
do
|
||||
REALLY_NEW_STAT="$NEW_STAT$(stat -t $dir2)"
|
||||
NEW_STAT="$REALLY_NEW_STAT"
|
||||
|
||||
for dir3 in "$dir2"/*/
|
||||
do
|
||||
REALLY_NEW_STAT="$NEW_STAT$(stat -t $dir3)"
|
||||
NEW_STAT="$REALLY_NEW_STAT"
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
if [ "$OLD_STAT" != "$NEW_STAT" ]; then
|
||||
su -c "echo \$($IPFS_COMMAND add -rq /home/$MY_USERNAME/Public | tail -n 1) > $IPFS_PUBLIC" - $MY_USERNAME
|
||||
echo "$NEW_STAT" > $OLD_STAT_FILE
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2016-12-26 Mon 11:03 -->
|
||||
<!-- 2017-12-03 Sun 12:49 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title></title>
|
||||
<title>‎</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Bob Mottram" />
|
||||
<meta name="description" content="How to use Mediagoblin"
|
||||
|
@ -71,6 +71,7 @@
|
|||
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'; }
|
||||
|
@ -188,7 +189,7 @@
|
|||
@licstart The following is the entire license notice for the
|
||||
JavaScript code in this tag.
|
||||
|
||||
Copyright (C) 2012-2013 Free Software Foundation, Inc.
|
||||
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
|
||||
|
@ -248,7 +249,7 @@ for the JavaScript code in this tag.
|
|||
</center>
|
||||
|
||||
<p>
|
||||
With Mediagoblin you can host video and audio content in a similar manner to the proprietary systems such as YouTube and SoundCloud. This system supports free media formats such as <i>webm</i>, <i>ogv</i> and <i>ogg</i>.
|
||||
With Mediagoblin you can host video and audio content in a similar manner to the proprietary systems such as YouTube and SoundCloud. This system supports free media formats such as <i>webm</i>, <i>ogv</i> and <i>ogg</i>. Another similar system which might be better fitted for small servers is <a href="./app_peertube.html">PeerTube</a>, since it uses webtorrent to distribute video files. Webtorrent will only work with WebRTC enabled browsers though.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
@ -263,9 +264,9 @@ When hosting media files you should take into consideration that since anyone on
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgc887b0f" class="outline-2">
|
||||
<h2 id="orgc887b0f">Installation</h2>
|
||||
<div class="outline-text-2" id="text-orgc887b0f">
|
||||
<div id="outline-container-org9311cd2" class="outline-2">
|
||||
<h2 id="org9311cd2">Installation</h2>
|
||||
<div class="outline-text-2" id="text-org9311cd2">
|
||||
<p>
|
||||
Log into your system with:
|
||||
</p>
|
||||
|
@ -290,9 +291,9 @@ After the install has completed go to <b>Security settings</b> and select <b>Cre
|
|||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-orga0efefa" class="outline-2">
|
||||
<h2 id="orga0efefa">Initial setup</h2>
|
||||
<div class="outline-text-2" id="text-orga0efefa">
|
||||
<div id="outline-container-orgefeb8cc" class="outline-2">
|
||||
<h2 id="orgefeb8cc">Initial setup</h2>
|
||||
<div class="outline-text-2" id="text-orgefeb8cc">
|
||||
<p>
|
||||
If you have just obtained a Lets Encrypt certificate as above then go to <b>About</b> on the administrator control panel and you should see your Mediagoblin domain listed there along with an onion address. You can then navigate to your site in a browser.
|
||||
</p>
|
||||
|
@ -308,9 +309,9 @@ You should repeat that for however many accounts you want on the system and then
|
|||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org1e39c39" class="outline-2">
|
||||
<h2 id="org1e39c39">File formats</h2>
|
||||
<div class="outline-text-2" id="text-org1e39c39">
|
||||
<div id="outline-container-org801bff8" class="outline-2">
|
||||
<h2 id="org801bff8">File formats</h2>
|
||||
<div class="outline-text-2" id="text-org801bff8">
|
||||
<p>
|
||||
It's a good idea to upload videos in <i>webm</i> format. In that case Mediagoblin will skip the transcoding step (which can take hours for videos of non-trivial length) and the whole process will be quicker. Transcoding just converts whatever file format you submit into a standard resolution and file type. On your local system you can convert a video to webm with:
|
||||
</p>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"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-12-01 Fri 10:41 -->
|
||||
<!-- 2017-12-03 Sun 12:48 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>‎</title>
|
||||
|
@ -249,7 +249,7 @@ for the JavaScript code in this tag.
|
|||
</center>
|
||||
|
||||
<p>
|
||||
This is a video hosting system similar to Mediagoblin but using <a href="https://webtorrent.io/">webtorrent</a> to help distribute the files to or between clients. This should be more practical for situations where a video becomes popular because the load is then spread across the network, with performance increasing with the number of nodes.
|
||||
This is a video hosting system similar to Mediagoblin but using <a href="https://webtorrent.io/">webtorrent</a> to help distribute the files to or between clients. This should be more practical for situations where a video becomes popular because the load is then spread across the network, with performance increasing with the number of nodes. However, the torrenting aspect of it only works with WebRTC enabled browsers and so this means it's unlikely to fully work with a Tor browser. Without WebRTC then from a user point of view it's effectively the same thing as Mediagoblin.
|
||||
</p>
|
||||
|
||||
<div class="org-center">
|
||||
|
@ -260,9 +260,9 @@ This is a video hosting system similar to Mediagoblin but using <a href="https:/
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org89b3d26" class="outline-2">
|
||||
<h2 id="org89b3d26">Installation</h2>
|
||||
<div class="outline-text-2" id="text-org89b3d26">
|
||||
<div id="outline-container-orgd4e2d94" class="outline-2">
|
||||
<h2 id="orgd4e2d94">Installation</h2>
|
||||
<div class="outline-text-2" id="text-orgd4e2d94">
|
||||
<p>
|
||||
Log into your system with:
|
||||
</p>
|
||||
|
@ -282,9 +282,9 @@ Select <b>Add/Remove Apps</b> then <b>peertube</b>. You will then be asked for a
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgc6d8e67" class="outline-2">
|
||||
<h2 id="orgc6d8e67">Initial setup</h2>
|
||||
<div class="outline-text-2" id="text-orgc6d8e67">
|
||||
<div id="outline-container-org50ab03b" class="outline-2">
|
||||
<h2 id="org50ab03b">Initial setup</h2>
|
||||
<div class="outline-text-2" id="text-org50ab03b">
|
||||
<p>
|
||||
Navigate to your site and select <b>Signup</b> to create a new account. By default the maximum number of accounts on your system is limited to a small number so that millions of random internet users can't then begin uploading dubious content. After that it's pretty straightforward.
|
||||
</p>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"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-11-10 Fri 13:13 -->
|
||||
<!-- 2017-12-09 Sat 23:07 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>‎</title>
|
||||
|
@ -246,13 +246,13 @@ for the JavaScript code in this tag.
|
|||
|
||||
<center><h1>Mesh Network: Images</h1></center>
|
||||
|
||||
<div id="outline-container-org6d0027e" class="outline-2">
|
||||
<h2 id="org6d0027e">Pre-built Disk Images</h2>
|
||||
<div class="outline-text-2" id="text-org6d0027e">
|
||||
<div id="outline-container-org59e2a01" class="outline-2">
|
||||
<h2 id="org59e2a01">Pre-built Disk Images</h2>
|
||||
<div class="outline-text-2" id="text-org59e2a01">
|
||||
</div>
|
||||
<div id="outline-container-orgaaf029b" class="outline-3">
|
||||
<h3 id="orgaaf029b">Writing many images quickly</h3>
|
||||
<div class="outline-text-3" id="text-orgaaf029b">
|
||||
<div id="outline-container-org58cbb17" class="outline-3">
|
||||
<h3 id="org58cbb17">Writing many images quickly</h3>
|
||||
<div class="outline-text-3" id="text-org58cbb17">
|
||||
<p>
|
||||
There may be situations where you need to write the same disk image to multiple drives at the same time in order to maximize rate of deployment. In the instructions given below the <b>dd</b> command is used for writing to the target drive, but to write to multiple drives you can use a tool such as <a href="https://wiki.gnome.org/Apps/MultiWriter">GNOME MultiWriter</a>.
|
||||
</p>
|
||||
|
@ -280,9 +280,9 @@ The MultiWriter tool is also available within mesh client images, so that you ca
|
|||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-orgc0ddf07" class="outline-3">
|
||||
<h3 id="orgc0ddf07">Client images</h3>
|
||||
<div class="outline-text-3" id="text-orgc0ddf07">
|
||||
<div id="outline-container-orgbec0fc8" class="outline-3">
|
||||
<h3 id="orgbec0fc8">Client images</h3>
|
||||
<div class="outline-text-3" id="text-orgbec0fc8">
|
||||
<div class="org-center">
|
||||
|
||||
<div class="figure">
|
||||
|
@ -301,7 +301,7 @@ wget https://freedombone.net/downloads/current/freedombone-meshclient-i386.img.x
|
|||
wget https://freedombone.net/downloads/current/freedombone-meshclient-i386.img.xz.sig
|
||||
gpg --verify freedombone-meshclient-i386.img.xz.sig
|
||||
sha256sum freedombone-meshclient-i386.img.xz
|
||||
376668ae375518af268d67b9ccb7ab7b2c2787b445c125f61487ff97950092e8
|
||||
3e88205461bb2061dc172ff0a1e65e5cae1013f8f7dc26c6d5cbe1c986c98555
|
||||
unxz freedombone-meshclient-i386.img.xz
|
||||
sudo dd <span class="org-variable-name">if</span>=/dev/zero <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">count</span>=8
|
||||
sudo dd <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">if</span>=freedombone-meshclient-i386.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
|
||||
|
@ -322,7 +322,7 @@ wget https://freedombone.net/downloads/current/freedombone-meshclient-insecure-i
|
|||
wget https://freedombone.net/downloads/current/freedombone-meshclient-insecure-i386.img.xz.sig
|
||||
gpg --verify freedombone-meshclient-insecure-i386.img.xz.sig
|
||||
sha256sum freedombone-meshclient-insecure-i386.img.xz
|
||||
81098572ac522b543f2c015dd0819d27c290b93b771efc9de6e93742e3981daf
|
||||
09c059664daf56d210134735d37e8117bb7b755acc8b9b253cdfa42052249ccb
|
||||
unxz freedombone-meshclient-insecure-i386.img.xz
|
||||
sudo dd <span class="org-variable-name">if</span>=/dev/zero <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">count</span>=8
|
||||
sudo dd <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">if</span>=freedombone-meshclient-insecure-i386.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
|
||||
|
@ -331,16 +331,16 @@ sudo dd <span class="org-variable-name">bs</span>=1M <span class="org-variable-n
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8eb2396" class="outline-3">
|
||||
<h3 id="org8eb2396">Router images</h3>
|
||||
<div class="outline-text-3" id="text-org8eb2396">
|
||||
<div id="outline-container-org6f3a05a" class="outline-3">
|
||||
<h3 id="org6f3a05a">Router images</h3>
|
||||
<div class="outline-text-3" id="text-org6f3a05a">
|
||||
<p>
|
||||
Routers are intended to build network coverage for an area using small and low cost hardware. You can bolt them to walls or leave them on window ledges. They don't have any user interface and their only job is to haul network traffic across the mesh and to enable peers to find each other via running bootstrap nodes for Tox and IPFS. Copy the image to a microSD card and insert it into the router, plug in an Atheros wifi dongle and power on. That should be all you need to do.
|
||||
</p>
|
||||
</div>
|
||||
<div id="outline-container-orgd7fdd98" class="outline-4">
|
||||
<h4 id="orgd7fdd98">Beaglebone Black</h4>
|
||||
<div class="outline-text-4" id="text-orgd7fdd98">
|
||||
<div id="outline-container-org0387979" class="outline-4">
|
||||
<h4 id="org0387979">Beaglebone Black</h4>
|
||||
<div class="outline-text-4" id="text-org0387979">
|
||||
<div class="org-center">
|
||||
|
||||
<div class="figure">
|
||||
|
@ -377,9 +377,9 @@ There is still a software freedom issue with the Beaglebone Black, but it doesn'
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org6584d9d" class="outline-2">
|
||||
<h2 id="org6584d9d">Building Disk Images</h2>
|
||||
<div class="outline-text-2" id="text-org6584d9d">
|
||||
<div id="outline-container-org0db60a2" class="outline-2">
|
||||
<h2 id="org0db60a2">Building Disk Images</h2>
|
||||
<div class="outline-text-2" id="text-org0db60a2">
|
||||
<p>
|
||||
It's better not to trust images downloaded from random places on the interwebs. Chances are that unless you are in the web of trust of the above GPG signatures then they don't mean very much to you. If you actually want something trustworthy then build the images from scratch. It will take some time. Here's how to do it.
|
||||
</p>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"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-10-27 Fri 14:28 -->
|
||||
<!-- 2017-12-09 Sat 17:57 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>‎</title>
|
||||
|
@ -247,30 +247,38 @@ for the JavaScript code in this tag.
|
|||
<center><h1>Mesh Network: How to use it</h1></center>
|
||||
|
||||
<ul class="org-ul">
|
||||
<li><a href="#org6a43d4d">Boot trouble</a></li>
|
||||
<li><a href="#org03f4d8a">Set the Date</a></li>
|
||||
<li><a href="#org55f29f9">Check network status</a></li>
|
||||
<li><a href="#org802070f">Connecting to the internet</a></li>
|
||||
<li><a href="#orgd9dffae">Connecting two meshes over the internet via a VPN tunnel</a></li>
|
||||
<li><a href="#org62a60b3">Mobile devices (phones, etc)</a></li>
|
||||
<li><a href="#org216d212">Chat System</a></li>
|
||||
<li><a href="#orgfe4d63b">Collaborative document editing</a></li>
|
||||
<li><a href="#org76f234d">Social Network</a></li>
|
||||
<li><a href="#org6154f04">Sharing Files</a></li>
|
||||
<li><a href="#orga4dae6b">Blogging</a></li>
|
||||
<li><a href="#orgdec778b">Boot trouble</a></li>
|
||||
<li><a href="#org92b8992">Set the Date</a></li>
|
||||
<li><a href="#org5854462">Check network status</a></li>
|
||||
<li><a href="#orga9a6d4b">Connecting to the internet</a></li>
|
||||
<li><a href="#org5fe4cbd">Connecting two meshes over the internet via a VPN tunnel</a></li>
|
||||
<li><a href="#org0f9ab05">Mobile devices (phones, etc)</a></li>
|
||||
<li><a href="#orgf44bf0d">Chat System</a></li>
|
||||
<li><a href="#org6940994">Collaborative document editing</a></li>
|
||||
<li><a href="#orgdcb8a5f">Social Network</a></li>
|
||||
<li><a href="#orga1bfc4a">Sharing Files</a></li>
|
||||
<li><a href="#orgfbceae4">Blogging</a></li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
When you first boot from the USB drive the system will create some encryption keys, assign a unique network address to the system and then reboot itself. When that's done you should see a prompt asking for a username. This username just makes it easy for others to initially find you on the mesh and will appear in the list of users.
|
||||
</p>
|
||||
|
||||
<div class="org-center">
|
||||
|
||||
<div class="figure">
|
||||
<p><img src="images/mesh_initial_login.jpg" alt="mesh_initial_login.jpg" />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
After a minute or two if you are within wifi range and there is at least one other user on the network then you should see additional icons appear on the desktop, such as <i>Other Users</i> and <i>Chat</i>.
|
||||
</p>
|
||||
|
||||
<div id="outline-container-org6a43d4d" class="outline-2">
|
||||
<h2 id="org6a43d4d">Boot trouble</h2>
|
||||
<div class="outline-text-2" id="text-org6a43d4d">
|
||||
<div id="outline-container-orgdec778b" class="outline-2">
|
||||
<h2 id="orgdec778b">Boot trouble</h2>
|
||||
<div class="outline-text-2" id="text-orgdec778b">
|
||||
<p>
|
||||
If the system doesn't boot and reports an error which includes <b>/dev/mapper/loop0p1</b> then reboot with <b>Ctrl-Alt-Del</b> and when you see the grub menu press <b>e</b> and manually change <b>/dev/mapper/loop0p1</b> to <b>/dev/sdb1</b>, then press <b>Ctrl-x</b>. If that doesn't work then reboot and try <b>/dev/sdc1</b> instead.
|
||||
</p>
|
||||
|
@ -280,9 +288,9 @@ After the system has booted successfully the problem should resolve itself on su
|
|||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-org03f4d8a" class="outline-2">
|
||||
<h2 id="org03f4d8a">Set the Date</h2>
|
||||
<div class="outline-text-2" id="text-org03f4d8a">
|
||||
<div id="outline-container-org92b8992" class="outline-2">
|
||||
<h2 id="org92b8992">Set the Date</h2>
|
||||
<div class="outline-text-2" id="text-org92b8992">
|
||||
<p>
|
||||
On the ordinary internet the date and time of your system would be set automatically via NTP. But this is not the internet and so you will need to manually ensure that your date and time settings are correct. You might need to periodically do this if your clock drifts. It's not essential that the time on your system be highly accurate, but if it drifts too far or goes back to epoch then things could become a little confusing in regard to the order of blog posts.
|
||||
</p>
|
||||
|
@ -292,9 +300,9 @@ On the ordinary internet the date and time of your system would be set automatic
|
|||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-org55f29f9" class="outline-2">
|
||||
<h2 id="org55f29f9">Check network status</h2>
|
||||
<div class="outline-text-2" id="text-org55f29f9">
|
||||
<div id="outline-container-org5854462" class="outline-2">
|
||||
<h2 id="org5854462">Check network status</h2>
|
||||
<div class="outline-text-2" id="text-org5854462">
|
||||
<p>
|
||||
Unlike with ordinary wifi, on the mesh you don't get a signal strength icon and so it's not simple to see if you have a good connection.
|
||||
</p>
|
||||
|
@ -317,9 +325,9 @@ When you are finished close the window and then select the <i>Network Restart</i
|
|||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-org802070f" class="outline-2">
|
||||
<h2 id="org802070f">Connecting to the internet</h2>
|
||||
<div class="outline-text-2" id="text-org802070f">
|
||||
<div id="outline-container-orga9a6d4b" class="outline-2">
|
||||
<h2 id="orga9a6d4b">Connecting to the internet</h2>
|
||||
<div class="outline-text-2" id="text-orga9a6d4b">
|
||||
<div class="org-center">
|
||||
|
||||
<div class="figure">
|
||||
|
@ -350,9 +358,9 @@ Where <i>myclient.ovpn</i> comes from your VPN provider and with the password "<
|
|||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-orgd9dffae" class="outline-2">
|
||||
<h2 id="orgd9dffae">Connecting two meshes over the internet via a VPN tunnel</h2>
|
||||
<div class="outline-text-2" id="text-orgd9dffae">
|
||||
<div id="outline-container-org5fe4cbd" class="outline-2">
|
||||
<h2 id="org5fe4cbd">Connecting two meshes over the internet via a VPN tunnel</h2>
|
||||
<div class="outline-text-2" id="text-org5fe4cbd">
|
||||
<div class="org-center">
|
||||
|
||||
<div class="figure">
|
||||
|
@ -372,7 +380,7 @@ In your home directory on a system connected via ethernet to an internet router
|
|||
<div class="org-center">
|
||||
|
||||
<div class="figure">
|
||||
<p><img src="images/mesh_connect.jpg" alt="mesh_connect.jpg" />
|
||||
<p><img src="images/mesh_connect.png" alt="mesh_connect.png" />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -387,9 +395,9 @@ From a deep packet inspection point of view the traffic going over the internet
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org62a60b3" class="outline-2">
|
||||
<h2 id="org62a60b3">Mobile devices (phones, etc)</h2>
|
||||
<div class="outline-text-2" id="text-org62a60b3">
|
||||
<div id="outline-container-org0f9ab05" class="outline-2">
|
||||
<h2 id="org0f9ab05">Mobile devices (phones, etc)</h2>
|
||||
<div class="outline-text-2" id="text-org0f9ab05">
|
||||
<div class="org-center">
|
||||
|
||||
<div class="figure">
|
||||
|
@ -419,11 +427,27 @@ On some android devices you may need to move the downloaded APK file from the <b
|
|||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-org216d212" class="outline-2">
|
||||
<h2 id="org216d212">Chat System</h2>
|
||||
<div class="outline-text-2" id="text-org216d212">
|
||||
<div id="outline-container-orgf44bf0d" class="outline-2">
|
||||
<h2 id="orgf44bf0d">Chat System</h2>
|
||||
<div class="outline-text-2" id="text-orgf44bf0d">
|
||||
<p>
|
||||
Ensure that you're within wifi range of at least one other mesh peer (could be a router or client) and then you should see that the <i>Chat</i> and <i>Other Users</i> icons appear. Select the users icon and you should see a list of users on the mesh. Select the <i>Chat</i> icon and once you are connected you should see the status light turn green. If after a few minutes you don't get the green status light then try closing and re-opening the Tox chat application. Select the plus button to add a friend and then copy and paste in a Tox ID from the users list.
|
||||
Ensure that you're within wifi range of at least one other mesh peer (could be a router or client) and then you should see that the <i>Chat</i> and <i>Other Users</i> icons appear. Select the users icon and you should see a list of users on the mesh.
|
||||
</p>
|
||||
|
||||
<div class="org-center">
|
||||
|
||||
<div class="figure">
|
||||
<p><img src="images/mesh_peerslist.png" alt="mesh_peerslist.png" />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Selecting a user followed by the Ok button will copy their Tox ID to the clipboard.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Now select the <i>Chat</i> icon and once you are connected you should see the status light turn green. If after a few minutes you don't get the green status light then try closing and re-opening the Tox chat application. Select the plus button to add a friend and then paste in a Tox ID.
|
||||
</p>
|
||||
|
||||
<div class="org-center">
|
||||
|
@ -480,9 +504,9 @@ At present video doesn't work reliably, but text and voice chat do work well.
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgfe4d63b" class="outline-2">
|
||||
<h2 id="orgfe4d63b">Collaborative document editing</h2>
|
||||
<div class="outline-text-2" id="text-orgfe4d63b">
|
||||
<div id="outline-container-org6940994" class="outline-2">
|
||||
<h2 id="org6940994">Collaborative document editing</h2>
|
||||
<div class="outline-text-2" id="text-org6940994">
|
||||
<p>
|
||||
The mesh system includes the ability to collaboratively edit various sorts of documents using CryptPad. CryptPad is an almost peer-to-peer system in that it is designed for a client/server environment but that the server aspect of it is very minimal and limited to orchestrating the connected clients. With CryptPad installed on each mesh peer it effectively enables peer-to-peer collaborative editing. Documents are ephemeral and forgotten unless they're exported or copy-pasted to permanent storage.
|
||||
</p>
|
||||
|
@ -513,9 +537,9 @@ If you have the chat system running you can then copy and paste the URL for your
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org76f234d" class="outline-2">
|
||||
<h2 id="org76f234d">Social Network</h2>
|
||||
<div class="outline-text-2" id="text-org76f234d">
|
||||
<div id="outline-container-orgdcb8a5f" class="outline-2">
|
||||
<h2 id="orgdcb8a5f">Social Network</h2>
|
||||
<div class="outline-text-2" id="text-orgdcb8a5f">
|
||||
<p>
|
||||
Patchwork is available as a social networking system for the mesh. Like all social network systems it has a stream of posts and you can follow or unfollow other users. You can also send private messages to other users with end-to-end encryption.
|
||||
</p>
|
||||
|
@ -550,9 +574,9 @@ The Secure Scuttlebutt protocol which Patchwork is based upon is intended to be
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org6154f04" class="outline-2">
|
||||
<h2 id="org6154f04">Sharing Files</h2>
|
||||
<div class="outline-text-2" id="text-org6154f04">
|
||||
<div id="outline-container-orga1bfc4a" class="outline-2">
|
||||
<h2 id="orga1bfc4a">Sharing Files</h2>
|
||||
<div class="outline-text-2" id="text-orga1bfc4a">
|
||||
<p>
|
||||
You can make files publicly available on the network simply by dragging and dropping them into the <i>Public</i> folder on the desktop. To view the files belonging to another user select the desktop icon called <i>Visit a site</i> and enter the username or Tox ID of the other user.
|
||||
</p>
|
||||
|
@ -567,17 +591,17 @@ You can make files publicly available on the network simply by dragging and drop
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orga4dae6b" class="outline-2">
|
||||
<h2 id="orga4dae6b">Blogging</h2>
|
||||
<div class="outline-text-2" id="text-orga4dae6b">
|
||||
<div id="outline-container-orgfbceae4" class="outline-2">
|
||||
<h2 id="orgfbceae4">Blogging</h2>
|
||||
<div class="outline-text-2" id="text-orgfbceae4">
|
||||
<p>
|
||||
To create a blog post select the <i>Blog</i> icon on the desktop and then use the up and down cursor keys, space bar and enter key to add a new entry. Edit the title of the entry and add your text. You can also include photos if you wish - just copy them to the <b>CreateBlog/content/images</b> directory and then link to them as shown.
|
||||
To create a blog post select the <i>Blog</i> icon on the desktop and then select <b>New blog entry</b> and <b>Ok</b>. Edit the title of the entry and add your text. You can also include photos if you wish - just copy them to the <b>CreateBlog/content/images</b> directory and then link to them as shown.
|
||||
</p>
|
||||
|
||||
<div class="org-center">
|
||||
|
||||
<div class="figure">
|
||||
<p><img src="images/mesh_new_blog.jpg" alt="mesh_new_blog.jpg" />
|
||||
<p><img src="images/mesh_blog.png" alt="mesh_blog.png" />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -603,8 +627,16 @@ To finish your blog entry just select <i>Save</i> and then close the editor. On
|
|||
</div>
|
||||
|
||||
<p>
|
||||
You can also visit other blogs, edit or delete your previous entry and also change your blog theme.
|
||||
You can also visit other blogs, edit or delete your previous entry and change your blog theme.
|
||||
</p>
|
||||
|
||||
<div class="org-center">
|
||||
|
||||
<div class="figure">
|
||||
<p><img src="images/mesh_select_blog_theme.png" alt="mesh_select_blog_theme.png" />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|