ソースを参照

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

Bob Mottram 7 年 前
コミット
e9ea698222
共有10 個のファイルを変更した1130 個の追加114 個の削除を含む
  1. 4
    0
      doc/EN/apps.org
  2. 4
    0
      doc/EN/armbian.org
  3. バイナリ
      img/peertube.jpg
  4. 655
    0
      src/freedombone-app-peertube
  5. 4
    1
      src/freedombone-app-smilodon
  6. 1
    0
      src/freedombone-image-customise
  7. 8
    0
      src/freedombone-utils-postgresql
  8. 323
    0
      website/EN/app_peertube.html
  9. 124
    112
      website/EN/apps.html
  10. 7
    1
      website/EN/armbian.html

+ 4
- 0
doc/EN/apps.org ファイルの表示

115
 Store files on your server and sync them with laptops or mobile devices. Includes many plugins including videoconferencing and collaborative document editing.
115
 Store files on your server and sync them with laptops or mobile devices. Includes many plugins including videoconferencing and collaborative document editing.
116
 
116
 
117
 [[./app_nextcloud.html][How to use it]]
117
 [[./app_nextcloud.html][How to use it]]
118
+* PeerTube
119
+Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better enables the streaming load to be shared across servers.
120
+
121
+[[./app_peertube.html][How to use it]]
118
 * PI-Hole
122
 * PI-Hole
119
 The black hole for web adverts. Block adverts at the domain name level within your local network. It can significantly reduce bandwidth, speed up page load times and protect your systems from being tracked by spyware.
123
 The black hole for web adverts. Block adverts at the domain name level within your local network. It can significantly reduce bandwidth, speed up page load times and protect your systems from being tracked by spyware.
120
 
124
 

+ 4
- 0
doc/EN/armbian.org ファイルの表示

15
 <center><h1>Installing on Armbian</h1></center>
15
 <center><h1>Installing on Armbian</h1></center>
16
 #+end_export
16
 #+end_export
17
 
17
 
18
+#+begin_quote
19
+"/we are the music makers, we are the dreamers of dreams. cyberpunks and pirates. chaotic spectres hauting cyberspace. engineers, artists, hackers./"
20
+#+end_quote
21
+
18
 If you have a single board ARM computer which isn't one of the supported ones then you can probably still install Freedombone onto it if it has a [[https://www.armbian.com/download/][Debian Stretch Armbian image]] available for it.
22
 If you have a single board ARM computer which isn't one of the supported ones then you can probably still install Freedombone onto it if it has a [[https://www.armbian.com/download/][Debian Stretch Armbian image]] available for it.
19
 
23
 
20
 Download the Armbian image for your board. It must be version 9 (Stretch), otherwise it won't work. Extract the image from its archive, then copy it to a microSD card:
24
 Download the Armbian image for your board. It must be version 9 (Stretch), otherwise it won't work. Extract the image from its archive, then copy it to a microSD card:

バイナリ
img/peertube.jpg ファイルの表示


+ 655
- 0
src/freedombone-app-peertube ファイルの表示

1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# PeerTube server
12
+#
13
+# License
14
+# =======
15
+#
16
+# Copyright (C) 2017 Bob Mottram <bob@freedombone.net>
17
+#
18
+# This program is free software: you can redistribute it and/or modify
19
+# it under the terms of the GNU Affero General Public License as published by
20
+# the Free Software Foundation, either version 3 of the License, or
21
+# (at your option) any later version.
22
+#
23
+# This program is distributed in the hope that it will be useful,
24
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
25
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26
+# GNU Affero General Public License for more details.
27
+#
28
+# You should have received a copy of the GNU Affero General Public License
29
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30
+
31
+VARIANTS="full full-vim media"
32
+
33
+IN_DEFAULT_INSTALL=0
34
+SHOW_ON_ABOUT=1
35
+
36
+PEERTUBE_DOMAIN_NAME=
37
+PEERTUBE_CODE=
38
+PEERTUBE_REPO="https://github.com/Chocobozzz/PeerTube"
39
+PEERTUBE_COMMIT='fef2c7164e025b12a64185dbab058ef4129733c6'
40
+PEERTUBE_ONION_PORT=8136
41
+PEERTUBE_PORT=9004
42
+PEERTUBE_DIR=/etc/peertube
43
+
44
+peertube_variables=(PEERTUBE_DOMAIN_NAME
45
+                    PEERTUBE_CODE
46
+                    PEERTUBE_ADMIN_PASSWORD
47
+                    ONION_ONLY
48
+                    DDNS_PROVIDER
49
+                    MY_USERNAME
50
+                    MY_EMAIL_ADDRESS)
51
+
52
+function peertube_create_database {
53
+    if [ -f $IMAGE_PASSWORD_FILE ]; then
54
+        PEERTUBE_ADMIN_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)"
55
+    else
56
+        if [ ! $PEERTUBE_ADMIN_PASSWORD ]; then
57
+            PEERTUBE_ADMIN_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
58
+        fi
59
+    fi
60
+    if [ ! $PEERTUBE_ADMIN_PASSWORD ]; then
61
+        return
62
+    fi
63
+
64
+    systemctl restart postgresql
65
+    run_system_query_postgresql "CREATE USER peertube WITH PASSWORD '$PEERTUBE_ADMIN_PASSWORD';"
66
+    run_system_query_postgresql "CREATE DATABASE peertube OWNER peertube;"
67
+    run_system_query_postgresql "GRANT ALL PRIVILEGES ON DATABASE peertube to peertube;"
68
+    run_system_query_postgresql "set statement_timeout to 40000;"
69
+}
70
+
71
+function logging_on_peertube {
72
+    echo -n ''
73
+}
74
+
75
+function logging_off_peertube {
76
+    echo -n ''
77
+}
78
+
79
+function remove_user_peertube {
80
+    remove_username="$1"
81
+}
82
+
83
+function add_user_peertube {
84
+    if [[ $(app_is_installed peertube) == "0" ]]; then
85
+        echo '0'
86
+        return
87
+    fi
88
+
89
+    new_username="$1"
90
+    new_user_password="$2"
91
+
92
+    echo '0'
93
+}
94
+
95
+function install_interactive_peertube {
96
+    if [ ! $ONION_ONLY ]; then
97
+        ONION_ONLY='no'
98
+    fi
99
+
100
+    if [[ $ONION_ONLY != "no" ]]; then
101
+        PEERTUBE_DOMAIN_NAME='peertube.local'
102
+        write_config_param "PEERTUBE_DOMAIN_NAME" "$PEERTUBE_DOMAIN_NAME"
103
+    else
104
+        function_check interactive_site_details
105
+        interactive_site_details "peertube" "PEERTUBE_DOMAIN_NAME" "PEERTUBE_CODE"
106
+    fi
107
+    APP_INSTALLED=1
108
+}
109
+
110
+function peertube_set_admin_email {
111
+    read_config_param $MY_EMAIL_ADDRESS
112
+    data=$(tempfile 2>/dev/null)
113
+    trap "rm -f $data" 0 1 2 5 15
114
+    dialog --title $"Set PeerTube administrator email address" \
115
+           --backtitle $"Freedombone Control Panel" \
116
+           --inputbox $"Admin email address" 8 75 "$MY_EMAIL_ADDRESS" 2>$data
117
+    sel=$?
118
+    case $sel in
119
+        0)  peertube_email=$(<$data)
120
+            if [[ "$peertube_email" != *' '* && "$peertube_email" != *','* && "$peertube_email" != *';'* && "$peertube_email" == *'@'* && "$peertube_email" == *'.'* ]]; then
121
+                if [ ${#peertube_email} -gt 8 ]; then
122
+                    sed -i "s|email:.*|email: '${peertube_email}'|g" $PEERTUBE_DIR/config/production.yaml
123
+                    systemctl restart peertube
124
+                    dialog --title $"Set PeerTube administrator email address" \
125
+                           --msgbox $"Set to $peertube_email" 6 75
126
+                fi
127
+            fi
128
+            ;;
129
+    esac
130
+    rm $data
131
+}
132
+
133
+function peertube_disable_signups {
134
+    dialog --title $"Disable PeerTube signups" \
135
+           --backtitle $"Freedombone Control Panel" \
136
+           --yesno $"\nDo you wish to disable further PeerTube signups?" 8 75
137
+    sel=$?
138
+    case $sel in
139
+        0) sed "0,/RE/s/enabled:.*/enabled: false/" $PEERTUBE_DIR/config/production.yaml;;
140
+        1) sed "0,/RE/s/enabled:.*/enabled: true/" $PEERTUBE_DIR/config/production.yaml;;
141
+        255) return;;
142
+    esac
143
+
144
+    systemctl restart peertube
145
+}
146
+
147
+function configure_interactive_peertube {
148
+    while true
149
+    do
150
+        data=$(tempfile 2>/dev/null)
151
+        trap "rm -f $data" 0 1 2 5 15
152
+        dialog --backtitle $"Freedombone Control Panel" \
153
+               --title $"PeerTube" \
154
+               --radiolist $"Choose an operation:" 10 70 4 \
155
+               1 $"Set administrator email address" off \
156
+               2 $"Disable or enable signups" off \
157
+               3 $"Exit" on 2> $data
158
+        sel=$?
159
+        case $sel in
160
+            1) break;;
161
+            255) break;;
162
+        esac
163
+        case $(cat $data) in
164
+            1) peertube_set_admin_email;;
165
+            2) peertube_disable_signups;;
166
+            3) break;;
167
+        esac
168
+    done
169
+}
170
+
171
+function change_password_peertube {
172
+    PEERTUBE_USERNAME="$1"
173
+    PEERTUBE_PASSWORD="$2"
174
+    if [ ${#PEERTUBE_PASSWORD} -lt 8 ]; then
175
+        echo $'Peertube password is too short'
176
+        return
177
+    fi
178
+    #${PROJECT_NAME}-pass -u $PEERTUBE_USERNAME -a peertube -p "$PEERTUBE_PASSWORD"
179
+}
180
+
181
+function reconfigure_peertube {
182
+    echo -n ''
183
+}
184
+
185
+function upgrade_peertube {
186
+    CURR_PEERTUBE_COMMIT=$(get_completion_param "peertube commit")
187
+    if [[ "$CURR_PEERTUBE_COMMIT" == "$PEERTUBE_COMMIT" ]]; then
188
+        return
189
+    fi
190
+
191
+    read_config_param PEERTUBE_DOMAIN_NAME
192
+    systemctl stop peertube
193
+    cd $PEERTUBE_DIR
194
+
195
+    function_check set_repo_commit
196
+    set_repo_commit $PEERTUBE_DIR "peertube commit" "$PEERTUBE_COMMIT" $PEERTUBE_REPO
197
+
198
+    npm run upgrade-peertube
199
+    chown -R peertube:peertube $PEERTUBE_DIR
200
+    systemctl start peertube
201
+}
202
+
203
+function backup_local_peertube {
204
+    PEERTUBE_DOMAIN_NAME='peertube.local'
205
+    if grep -q "peertube domain" $COMPLETION_FILE; then
206
+        PEERTUBE_DOMAIN_NAME=$(get_completion_param "peertube domain")
207
+    fi
208
+
209
+    systemctl stop peertube
210
+    USE_POSTGRESQL=1
211
+    function_check backup_database_to_usb
212
+    backup_database_to_usb peertube
213
+    systemctl start peertube
214
+
215
+    peertube_path=$PEERTUBE_DIR/videos
216
+    if [ -d $peertube_path ]; then
217
+        suspend_site ${PEERTUBE_DOMAIN_NAME}
218
+        systemctl stop peertube
219
+        backup_directory_to_usb $peertube_path peertubevideos
220
+        systemctl start peertube
221
+        restart_site
222
+    fi
223
+}
224
+
225
+function restore_local_peertube {
226
+    PEERTUBE_DOMAIN_NAME='peertube.local'
227
+    if grep -q "peertube domain" $COMPLETION_FILE; then
228
+        PEERTUBE_DOMAIN_NAME=$(get_completion_param "peertube domain")
229
+    fi
230
+    if [ $PEERTUBE_DOMAIN_NAME ]; then
231
+        suspend_site ${PEERTUBE_DOMAIN_NAME}
232
+        systemctl stop peertube
233
+
234
+        USE_POSTGRESQL=1
235
+        restore_database peertube
236
+
237
+        temp_restore_dir=/root/temppeertubevideos
238
+        function_check restore_directory_from_usb
239
+        restore_directory_from_usb $temp_restore_dir peertubevideos
240
+        if [ -d $temp_restore_dir ]; then
241
+            if [ -d $temp_restore_dir$PEERTUBE_DIR/videos ]; then
242
+                cp -r $temp_restore_dir$PEERTUBE_DIR/videos/* $PEERTUBE_DIR/videos/
243
+            else
244
+                cp -r $temp_restore_dir/* $PEERTUBE_DIR/videos/
245
+            fi
246
+            chown -R peertube:peertube $PEERTUBE_DIR
247
+            rm -rf $temp_restore_dir
248
+        fi
249
+
250
+        systemctl start peertube
251
+        restart_site
252
+    fi
253
+}
254
+
255
+function backup_remote_peertube {
256
+    PEERTUBE_DOMAIN_NAME='peertube.local'
257
+    if grep -q "peertube domain" $COMPLETION_FILE; then
258
+        PEERTUBE_DOMAIN_NAME=$(get_completion_param "peertube domain")
259
+    fi
260
+
261
+    systemctl stop peertube
262
+    USE_POSTGRESQL=1
263
+    function_check backup_database_to_friend
264
+    backup_database_to_friend peertube
265
+    systemctl start peertube
266
+
267
+    temp_backup_dir=$PEERTUBE_DIR/videos
268
+    if [ -d $temp_backup_dir ]; then
269
+        systemctl stop peertube
270
+        suspend_site ${PEERTUBE_DOMAIN_NAME}
271
+        backup_directory_to_friend $temp_backup_dir peertubevideos
272
+        restart_site
273
+        systemctl start peertube
274
+    else
275
+        echo $"Peertube domain specified but not found in $temp_backup_dir"
276
+        exit 6383523
277
+    fi
278
+}
279
+
280
+function restore_remote_peertube {
281
+    PEERTUBE_DOMAIN_NAME='peertube.local'
282
+    if grep -q "peertube domain" $COMPLETION_FILE; then
283
+        PEERTUBE_DOMAIN_NAME=$(get_completion_param "peertube domain")
284
+    fi
285
+    suspend_site ${PEERTUBE_DOMAIN_NAME}
286
+
287
+    systemctl stop peertube
288
+
289
+    USE_POSTGRESQL=1
290
+    function_check restore_database_from_friend
291
+    restore_database_from_friend peertube
292
+
293
+    temp_restore_dir=/root/temppeertubevideos
294
+    function_check restore_directory_from_friend
295
+    restore_directory_from_friend $temp_restore_dir peertubevideos
296
+    if [ -d $temp_restore_dir ]; then
297
+        if [ -d $temp_restore_dir$PEERTUBE_DIR/videos ]; then
298
+            cp -r $temp_restore_dir$PEERTUBE_DIR/videos/* $PEERTUBE_DIR/videos/
299
+        else
300
+            cp -r $temp_restore_dir/* $PEERTUBE_DIR/videos/
301
+        fi
302
+        chown -R peertube: $PEERTUBE_DIR
303
+        rm -rf $temp_restore_dir
304
+    fi
305
+
306
+    systemctl start peertube
307
+    restart_site
308
+}
309
+
310
+function remove_peertube {
311
+    if [ ${#PEERTUBE_DOMAIN_NAME} -eq 0 ]; then
312
+        return
313
+    fi
314
+
315
+    systemctl stop peertube
316
+    systemctl disable peertube
317
+    rm /etc/systemd/system/peertube.service
318
+    systemctl daemon-reload
319
+
320
+    function_check remove_nodejs
321
+    remove_nodejs peertube
322
+
323
+    read_config_param "PEERTUBE_DOMAIN_NAME"
324
+    nginx_dissite $PEERTUBE_DOMAIN_NAME
325
+    remove_certs ${PEERTUBE_DOMAIN_NAME}
326
+    if [ -f /etc/nginx/sites-available/$PEERTUBE_DOMAIN_NAME ]; then
327
+        rm -f /etc/nginx/sites-available/$PEERTUBE_DOMAIN_NAME
328
+    fi
329
+    if [ -d /var/www/$PEERTUBE_DOMAIN_NAME ]; then
330
+        rm -rf /var/www/$PEERTUBE_DOMAIN_NAME
331
+    fi
332
+    remove_config_param PEERTUBE_DOMAIN_NAME
333
+    remove_config_param PEERTUBE_CODE
334
+    function_check remove_onion_service
335
+    remove_onion_service peertube ${PEERTUBE_ONION_PORT}
336
+    remove_completion_param "install_peertube"
337
+    sed -i '/peertube/d' $COMPLETION_FILE
338
+
339
+    function_check drop_database_postgresql
340
+    drop_database_postgresql peertube
341
+
342
+    remove_postgresql_user peertube
343
+    groupdel -f peertube
344
+    userdel -r peertube
345
+
346
+    if [ -d $PEERTUBE_DIR ]; then
347
+        rm -rf $PEERTUBE_DIR
348
+    fi
349
+
350
+    function_check remove_ddns_domain
351
+    remove_ddns_domain $PEERTUBE_DOMAIN_NAME
352
+}
353
+
354
+function peertube_setup_web {
355
+    peertube_nginx_file=/etc/nginx/sites-available/$PEERTUBE_DOMAIN_NAME
356
+
357
+    if [[ $ONION_ONLY == "no" ]]; then
358
+        echo 'server {' > $peertube_nginx_file
359
+        echo '  listen 80;' >> $peertube_nginx_file
360
+        echo '  listen [::]:80;' >> $peertube_nginx_file
361
+        echo "  server_name $PEERTUBE_DOMAIN_NAME;" >> $peertube_nginx_file
362
+        echo '  rewrite ^ https://$server_name$request_uri? permanent;' >> $peertube_nginx_file
363
+        echo '}' >> $peertube_nginx_file
364
+        echo '' >> $peertube_nginx_file
365
+        echo 'server {' >> $peertube_nginx_file
366
+        echo '  listen 443 ssl http2;' >> $peertube_nginx_file
367
+        echo '  listen [::]:443 ssl http2;' >> $peertube_nginx_file
368
+        echo "  server_name $PEERTUBE_DOMAIN_NAME;" >> $peertube_nginx_file
369
+        echo '' >> $peertube_nginx_file
370
+        function_check nginx_ssl
371
+        nginx_ssl $PEERTUBE_DOMAIN_NAME mobile
372
+
373
+        function_check nginx_disable_sniffing
374
+        nginx_disable_sniffing $PEERTUBE_DOMAIN_NAME
375
+
376
+        echo '  add_header Strict-Transport-Security max-age=15768000;' >> $peertube_nginx_file
377
+        echo '' >> $peertube_nginx_file
378
+        echo '  location / {' >> $peertube_nginx_file
379
+        echo "    proxy_pass http://localhost:${PEERTUBE_PORT};" >> $peertube_nginx_file
380
+        echo '    proxy_set_header X-Real-IP $remote_addr;' >> $peertube_nginx_file
381
+        echo '    proxy_set_header Host $host;' >> $peertube_nginx_file
382
+        echo '    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $peertube_nginx_file
383
+        echo '' >> $peertube_nginx_file
384
+        echo '    # For the video upload' >> $peertube_nginx_file
385
+        echo '    client_max_body_size 2G;' >> $peertube_nginx_file
386
+        echo '  }' >> $peertube_nginx_file
387
+        echo '' >> $peertube_nginx_file
388
+        echo '  location /static/webseed {' >> $peertube_nginx_file
389
+        echo "    if (\$request_method = 'OPTIONS') {" >> $peertube_nginx_file
390
+        echo "      add_header 'Access-Control-Allow-Origin' '*';" >> $peertube_nginx_file
391
+        echo "      add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';" >> $peertube_nginx_file
392
+        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
393
+        echo "      add_header 'Access-Control-Max-Age' 1728000;" >> $peertube_nginx_file
394
+        echo "      add_header 'Content-Type' 'text/plain charset=UTF-8';" >> $peertube_nginx_file
395
+        echo "      add_header 'Content-Length' 0;" >> $peertube_nginx_file
396
+        echo '      return 204;' >> $peertube_nginx_file
397
+        echo '    }' >> $peertube_nginx_file
398
+        echo '' >> $peertube_nginx_file
399
+        echo "    if (\$request_method = 'GET') {" >> $peertube_nginx_file
400
+        echo "      add_header 'Access-Control-Allow-Origin' '*';" >> $peertube_nginx_file
401
+        echo "      add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';" >> $peertube_nginx_file
402
+        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
403
+        echo '    }' >> $peertube_nginx_file
404
+        echo '' >> $peertube_nginx_file
405
+        echo "    alias $PEERTUBE_DIR/videos;" >> $peertube_nginx_file
406
+        echo '  }' >> $peertube_nginx_file
407
+        echo '' >> $peertube_nginx_file
408
+        echo '  # Websocket tracker' >> $peertube_nginx_file
409
+        echo '  location /tracker/socket {' >> $peertube_nginx_file
410
+        echo '    # Peers send a message to the tracker every 15 minutes' >> $peertube_nginx_file
411
+        echo '    # Dont close the websocket before this time' >> $peertube_nginx_file
412
+        echo '    proxy_read_timeout 1200s;' >> $peertube_nginx_file
413
+        echo '    proxy_set_header Upgrade $http_upgrade;' >> $peertube_nginx_file
414
+        echo '    proxy_set_header Connection "upgrade";' >> $peertube_nginx_file
415
+        echo '    proxy_http_version 1.1;' >> $peertube_nginx_file
416
+        echo '    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $peertube_nginx_file
417
+        echo '    proxy_set_header Host $host;' >> $peertube_nginx_file
418
+        echo "    proxy_pass http://localhost:${PEERTUBE_PORT};" >> $peertube_nginx_file
419
+        echo '  }' >> $peertube_nginx_file
420
+        echo '}' >> $peertube_nginx_file
421
+    else
422
+        echo -n '' > $peertube_nginx_file
423
+    fi
424
+    echo 'server {' >> $peertube_nginx_file
425
+    echo "  listen 127.0.0.1:$PEERTUBE_ONION_PORT default_server;" >> $peertube_nginx_file
426
+    echo "  server_name $PEERTUBE_ONION_HOSTNAME;" >> $peertube_nginx_file
427
+    echo '' >> $peertube_nginx_file
428
+    echo '  location / {' >> $peertube_nginx_file
429
+    echo "    proxy_pass http://localhost:${PEERTUBE_PORT};" >> $peertube_nginx_file
430
+    echo '    proxy_set_header X-Real-IP $remote_addr;' >> $peertube_nginx_file
431
+    echo '    proxy_set_header Host $host;' >> $peertube_nginx_file
432
+    echo '    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $peertube_nginx_file
433
+    echo '' >> $peertube_nginx_file
434
+    echo '    # For the video upload' >> $peertube_nginx_file
435
+    echo '    client_max_body_size 2G;' >> $peertube_nginx_file
436
+    echo '  }' >> $peertube_nginx_file
437
+    echo '' >> $peertube_nginx_file
438
+    echo '  location /static/webseed {' >> $peertube_nginx_file
439
+    echo "    if (\$request_method = 'OPTIONS') {" >> $peertube_nginx_file
440
+    echo "      add_header 'Access-Control-Allow-Origin' '*';" >> $peertube_nginx_file
441
+    echo "      add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';" >> $peertube_nginx_file
442
+    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
443
+    echo "      add_header 'Access-Control-Max-Age' 1728000;" >> $peertube_nginx_file
444
+    echo "      add_header 'Content-Type' 'text/plain charset=UTF-8';" >> $peertube_nginx_file
445
+    echo "      add_header 'Content-Length' 0;" >> $peertube_nginx_file
446
+    echo '      return 204;' >> $peertube_nginx_file
447
+    echo '    }' >> $peertube_nginx_file
448
+    echo '' >> $peertube_nginx_file
449
+    echo "    if (\$request_method = 'GET') {" >> $peertube_nginx_file
450
+    echo "      add_header 'Access-Control-Allow-Origin' '*';" >> $peertube_nginx_file
451
+    echo "      add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';" >> $peertube_nginx_file
452
+    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
453
+    echo '    }' >> $peertube_nginx_file
454
+    echo '' >> $peertube_nginx_file
455
+    echo "    alias $PEERTUBE_DIR/videos;" >> $peertube_nginx_file
456
+    echo '  }' >> $peertube_nginx_file
457
+    echo '' >> $peertube_nginx_file
458
+    echo '  # Websocket tracker' >> $peertube_nginx_file
459
+    echo '  location /tracker/socket {' >> $peertube_nginx_file
460
+    echo '    # Peers send a message to the tracker every 15 minutes' >> $peertube_nginx_file
461
+    echo '    # Dont close the websocket before this time' >> $peertube_nginx_file
462
+    echo '    proxy_read_timeout 1200s;' >> $peertube_nginx_file
463
+    echo '    proxy_set_header Upgrade $http_upgrade;' >> $peertube_nginx_file
464
+    echo '    proxy_set_header Connection "upgrade";' >> $peertube_nginx_file
465
+    echo '    proxy_http_version 1.1;' >> $peertube_nginx_file
466
+    echo '    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $peertube_nginx_file
467
+    echo '    proxy_set_header Host $host;' >> $peertube_nginx_file
468
+    echo "    proxy_pass http://localhost:${PEERTUBE_PORT};" >> $peertube_nginx_file
469
+    echo '  }' >> $peertube_nginx_file
470
+    echo '}' >> $peertube_nginx_file
471
+
472
+    # CSP currently causes an error
473
+    sed -i '/Content-Security-Policy/d' $peertube_nginx_file
474
+
475
+    function_check create_site_certificate
476
+    create_site_certificate $PEERTUBE_DOMAIN_NAME 'yes'
477
+
478
+    function_check nginx_ensite
479
+    nginx_ensite $PEERTUBE_DOMAIN_NAME
480
+}
481
+
482
+function peertube_create_config {
483
+    peertube_config_file=$PEERTUBE_DIR/config/production.yaml
484
+    echo 'listen:' > $peertube_config_file
485
+    echo "  port: $PEERTUBE_PORT" >> $peertube_config_file
486
+    echo '' >> $peertube_config_file
487
+    echo '# Correspond to your reverse proxy "listen" configuration' >> $peertube_config_file
488
+    echo 'webserver:' >> $peertube_config_file
489
+    if [[ $ONION_ONLY == 'no' ]]; then
490
+        echo '  https: true' >> $peertube_config_file
491
+        echo "  hostname: '$PEERTUBE_DOMAIN_NAME'" >> $peertube_config_file
492
+        echo '  port: 443' >> $peertube_config_file
493
+    else
494
+        echo '  https: false' >> $peertube_config_file
495
+        echo "  hostname: '$PEERTUBE_ONION_HOSTNAME'" >> $peertube_config_file
496
+        echo '  port: 80' >> $peertube_config_file
497
+    fi
498
+    echo '' >> $peertube_config_file
499
+    echo '# Your database name will be "peertube"+database.suffix' >> $peertube_config_file
500
+    echo 'database:' >> $peertube_config_file
501
+    echo "  hostname: 'localhost'" >> $peertube_config_file
502
+    echo '  port: 5432' >> $peertube_config_file
503
+    echo "  suffix: ''" >> $peertube_config_file
504
+    echo "  username: 'peertube'" >> $peertube_config_file
505
+    echo "  password: '$PEERTUBE_ADMIN_PASSWORD'" >> $peertube_config_file
506
+    echo '' >> $peertube_config_file
507
+    echo '# From the project root directory' >> $peertube_config_file
508
+    echo 'storage:' >> $peertube_config_file
509
+    echo "  certs: 'certs/'" >> $peertube_config_file
510
+    echo "  videos: 'videos/'" >> $peertube_config_file
511
+    echo "  logs: 'logs/'" >> $peertube_config_file
512
+    echo "  previews: 'previews/'" >> $peertube_config_file
513
+    echo "  thumbnails: 'thumbnails/'" >> $peertube_config_file
514
+    echo "  torrents: 'torrents/'" >> $peertube_config_file
515
+    echo "  cache: 'cache/'" >> $peertube_config_file
516
+    echo '' >> $peertube_config_file
517
+    echo 'cache:' >> $peertube_config_file
518
+    echo '  previews:' >> $peertube_config_file
519
+    echo '    size: 10 # Max number of previews you want to cache' >> $peertube_config_file
520
+    echo '' >> $peertube_config_file
521
+    echo 'admin:' >> $peertube_config_file
522
+    echo "  email: '$MY_EMAIL_ADDRESS'" >> $peertube_config_file
523
+    echo '' >> $peertube_config_file
524
+    echo 'signup:' >> $peertube_config_file
525
+    echo '  enabled: true' >> $peertube_config_file
526
+    echo '  limit: 2 # When the limit is reached, registrations are disabled. -1 == unlimited' >> $peertube_config_file
527
+    echo '' >> $peertube_config_file
528
+    echo 'user:' >> $peertube_config_file
529
+    echo '  # Default value of maximum video BYTES the user can upload (does not take into account transcoded files).' >> $peertube_config_file
530
+    echo '  # -1 == unlimited' >> $peertube_config_file
531
+    echo '  video_quota: -1' >> $peertube_config_file
532
+    echo '' >> $peertube_config_file
533
+    echo '# If enabled, the video will be transcoded to mp4 (x264) with "faststart" flag' >> $peertube_config_file
534
+    echo '# Uses a lot of CPU!' >> $peertube_config_file
535
+    echo 'transcoding:' >> $peertube_config_file
536
+    echo '  enabled: true' >> $peertube_config_file
537
+    echo '  threads: 2' >> $peertube_config_file
538
+    echo '  resolutions: # Only created if the original video has a higher resolution' >> $peertube_config_file
539
+    echo '    240p: true' >> $peertube_config_file
540
+    echo '    360p: false' >> $peertube_config_file
541
+    echo '    480p: false' >> $peertube_config_file
542
+    echo '    720p: false' >> $peertube_config_file
543
+    echo '    1080p: false' >> $peertube_config_file
544
+}
545
+
546
+function install_peertube {
547
+    if [ ! $ONION_ONLY ]; then
548
+        ONION_ONLY='no'
549
+    fi
550
+
551
+    if [ ! $PEERTUBE_DOMAIN_NAME ]; then
552
+        echo $'The peertube domain name was not specified'
553
+        exit 783523
554
+    fi
555
+
556
+    apt-get -yq install ffmpeg
557
+
558
+    function_check install_postgresql
559
+    install_postgresql
560
+
561
+    if [ ! -d /var/www/$PEERTUBE_DOMAIN_NAME/htdocs ]; then
562
+        mkdir -p /var/www/$PEERTUBE_DOMAIN_NAME/htdocs
563
+    fi
564
+
565
+    if [ -d $PEERTUBE_DIR ]; then
566
+        rm -rf $PEERTUBE_DIR
567
+    fi
568
+
569
+    groupadd peertube
570
+    useradd -c "PeerTube system account" -d $PEERTUBE_DIR -m -r -g peertube peertube
571
+
572
+    peertube_create_database
573
+
574
+    function_check install_nodejs
575
+    install_nodejs peertube
576
+
577
+    if [ -d /repos/peertube ]; then
578
+        mkdir -p $PEERTUBE_DIR
579
+        cp -r -p /repos/peertube/. $PEERTUBE_DIR
580
+        cd $PEERTUBE_DIR
581
+        git pull
582
+    else
583
+        function_check git_clone
584
+        git_clone $PEERTUBE_REPO $PEERTUBE_DIR
585
+    fi
586
+
587
+    cd $PEERTUBE_DIR
588
+    git checkout $PEERTUBE_COMMIT -b $PEERTUBE_COMMIT
589
+    set_completion_param "peertube commit" "$PEERTUBE_COMMIT"
590
+
591
+    npm install -g yarn
592
+    if [ ! "$?" = "0" ]; then
593
+        echo $'Failed to install yarn'
594
+        exit 79353234
595
+    fi
596
+    yarn add -D webpack --network-concurrency 1
597
+    yarn install
598
+    if [ ! "$?" = "0" ]; then
599
+        echo $'Failed to run yarn install'
600
+        exit 63754235
601
+    fi
602
+    npm install
603
+    if [ ! "$?" = "0" ]; then
604
+        echo $'Failed to install peertube'
605
+        exit 7835243
606
+    fi
607
+    npm run build
608
+    if [ ! "$?" = "0" ]; then
609
+        echo $'Failed to build peertube'
610
+        exit 5293593
611
+    fi
612
+
613
+    PEERTUBE_ONION_HOSTNAME=$(add_onion_service peertube 80 ${PEERTUBE_ONION_PORT})
614
+
615
+    echo '[Unit]' > /etc/systemd/system/peertube.service
616
+    echo 'Description=PeerTube Decentralized video streaming platform' >> /etc/systemd/system/peertube.service
617
+    echo 'After=syslog.target' >> /etc/systemd/system/peertube.service
618
+    echo 'After=network.target' >> /etc/systemd/system/peertube.service
619
+    echo '' >> /etc/systemd/system/peertube.service
620
+    echo '[Service]' >> /etc/systemd/system/peertube.service
621
+    echo 'User=peertube' >> /etc/systemd/system/peertube.service
622
+    echo 'Group=peertube' >> /etc/systemd/system/peertube.service
623
+    echo "WorkingDirectory=$PEERTUBE_DIR" >> /etc/systemd/system/peertube.service
624
+    echo "ExecStart=/usr/local/bin/npm start" >> /etc/systemd/system/peertube.service
625
+    echo "ExecStop=/usr/local/bin/npm stop" >> /etc/systemd/system/peertube.service
626
+    echo 'StandardOutput=syslog' >> /etc/systemd/system/peertube.service
627
+    echo 'StandardError=syslog' >> /etc/systemd/system/peertube.service
628
+    echo 'SyslogIdentifier=peertube' >> /etc/systemd/system/peertube.service
629
+    echo 'Restart=always' >> /etc/systemd/system/peertube.service
630
+    echo "Environment=NODE_ENV=production" >> /etc/systemd/system/peertube.service
631
+    echo '' >> /etc/systemd/system/peertube.service
632
+    echo '[Install]' >> /etc/systemd/system/peertube.service
633
+    echo 'WantedBy=multi-user.target' >> /etc/systemd/system/peertube.service
634
+
635
+    peertube_create_config
636
+
637
+    chown -R peertube:peertube $PEERTUBE_DIR
638
+
639
+    peertube_setup_web
640
+
641
+    ${PROJECT_NAME}-pass -u $MY_USERNAME -a peertube -p "$PEERTUBE_ADMIN_PASSWORD"
642
+
643
+    function_check add_ddns_domain
644
+    add_ddns_domain $PEERTUBE_DOMAIN_NAME
645
+
646
+    systemctl enable peertube
647
+    systemctl daemon-reload
648
+    systemctl start peertube
649
+    systemctl restart nginx
650
+
651
+    set_completion_param "peertube domain" "$PEERTUBE_DOMAIN_NAME"
652
+    APP_INSTALLED=1
653
+}
654
+
655
+# NOTE: deliberately no exit 0

+ 4
- 1
src/freedombone-app-smilodon ファイルの表示

35
 SHOW_ICANN_ADDRESS_ON_ABOUT=0
35
 SHOW_ICANN_ADDRESS_ON_ABOUT=0
36
 
36
 
37
 SMILODON_REPO="https://github.com/bashrc/smilodon"
37
 SMILODON_REPO="https://github.com/bashrc/smilodon"
38
-SMILODON_COMMIT='e17dad10f9d4c00516b9c93a587e4298b3639af3'
38
+SMILODON_COMMIT='18c91b84737fbb1a106d3c495730ac3261aac335'
39
 SMILODON_ADMIN_PASSWORD=
39
 SMILODON_ADMIN_PASSWORD=
40
 SMILODON_ONION_PORT=8054
40
 SMILODON_ONION_PORT=8054
41
 SMILODON_PATH=/etc/smilodon
41
 SMILODON_PATH=/etc/smilodon
283
     git checkout $SMILODON_COMMIT -b $SMILODON_COMMIT
283
     git checkout $SMILODON_COMMIT -b $SMILODON_COMMIT
284
     set_completion_param "smilodon commit" "$SMILODON_COMMIT"
284
     set_completion_param "smilodon commit" "$SMILODON_COMMIT"
285
 
285
 
286
+    sed -i 's|https:|http:|g' $SMILODON_PATH/api/utilities.py
287
+
286
     groupadd smilodon
288
     groupadd smilodon
287
     useradd -c "Smilodon system account" -d $SMILODON_PATH -m -r -g smilodon smilodon
289
     useradd -c "Smilodon system account" -d $SMILODON_PATH -m -r -g smilodon smilodon
288
 
290
 
346
     echo "export smilodon_admin_address=$MY_EMAIL_ADDRESS" >> ${SMILODON_PATH}/run_smilodon.sh
348
     echo "export smilodon_admin_address=$MY_EMAIL_ADDRESS" >> ${SMILODON_PATH}/run_smilodon.sh
347
     echo "export MAIL_SERVER='localhost'" >> ${SMILODON_PATH}/run_smilodon.sh
349
     echo "export MAIL_SERVER='localhost'" >> ${SMILODON_PATH}/run_smilodon.sh
348
     echo "export MAIL_PORT=25" >> ${SMILODON_PATH}/run_smilodon.sh
350
     echo "export MAIL_PORT=25" >> ${SMILODON_PATH}/run_smilodon.sh
351
+    echo "export API_NAME=$SMILODON_ONION_HOSTNAME" >> ${SMILODON_PATH}/run_smilodon.sh
349
     echo "python3 run.py" >> ${SMILODON_PATH}/run_smilodon.sh
352
     echo "python3 run.py" >> ${SMILODON_PATH}/run_smilodon.sh
350
     chmod +x ${SMILODON_PATH}/run_smilodon.sh
353
     chmod +x ${SMILODON_PATH}/run_smilodon.sh
351
     chown smilodon:smilodon ${SMILODON_PATH}/run_smilodon.sh
354
     chown smilodon:smilodon ${SMILODON_PATH}/run_smilodon.sh

+ 1
- 0
src/freedombone-image-customise ファイルの表示

1616
     git clone $TURTL_REPO $rootdir/repos/turtl
1616
     git clone $TURTL_REPO $rootdir/repos/turtl
1617
     git clone $KANBOARD_REPO $rootdir/repos/kanboard
1617
     git clone $KANBOARD_REPO $rootdir/repos/kanboard
1618
     git clone $KEYSERVER_WEB_REPO $rootdir/repos/keyserverweb
1618
     git clone $KEYSERVER_WEB_REPO $rootdir/repos/keyserverweb
1619
+    git clone $PEERTUBE_REPO $rootdir/repos/peertube
1619
     #git clone $WEKAN_REPO $rootdir/repos/wekan
1620
     #git clone $WEKAN_REPO $rootdir/repos/wekan
1620
     #git clone $FLOW_ROUTER_REPO $rootdir/repos/flowrouter
1621
     #git clone $FLOW_ROUTER_REPO $rootdir/repos/flowrouter
1621
     #git clone $METEOR_USERACCOUNTS_REPO $rootdir/repos/meteoruseraccounts
1622
     #git clone $METEOR_USERACCOUNTS_REPO $rootdir/repos/meteoruseraccounts

+ 8
- 0
src/freedombone-utils-postgresql ファイルの表示

87
 function add_postgresql_user {
87
 function add_postgresql_user {
88
     postgresql_username=$1
88
     postgresql_username=$1
89
     postgresql_password=$2
89
     postgresql_password=$2
90
+    cd /etc/postgresql
90
     if [[ "$3" != 'encrypt'* ]]; then
91
     if [[ "$3" != 'encrypt'* ]]; then
91
         sudo -u postgres psql -c "create user $postgresql_username password '$postgresql_password';"
92
         sudo -u postgres psql -c "create user $postgresql_username password '$postgresql_password';"
92
     else
93
     else
97
 
98
 
98
 function remove_postgresql_user {
99
 function remove_postgresql_user {
99
     postgresql_username=$1
100
     postgresql_username=$1
101
+    cd /etc/postgresql
100
     sudo -u postgres psql -c "drop user $postgresql_username"
102
     sudo -u postgres psql -c "drop user $postgresql_username"
101
 }
103
 }
102
 
104
 
103
 function drop_database_postgresql {
105
 function drop_database_postgresql {
104
     database_name="$1"
106
     database_name="$1"
107
+    cd /etc/postgresql
105
     sudo -u postgres psql -c "drop database $database_name"
108
     sudo -u postgres psql -c "drop database $database_name"
106
 }
109
 }
107
 
110
 
108
 function run_system_query_postgresql {
111
 function run_system_query_postgresql {
109
     query=$1
112
     query=$1
113
+    cd /etc/postgresql
110
     sudo -u postgres psql -c "$query"
114
     sudo -u postgres psql -c "$query"
111
 }
115
 }
112
 
116
 
113
 function run_query_postgresql {
117
 function run_query_postgresql {
114
     database_name=$1
118
     database_name=$1
115
     database_query=$2
119
     database_query=$2
120
+    cd /etc/postgresql
116
     sudo -u postgres psql -d $database_name -c "$database_query"
121
     sudo -u postgres psql -d $database_name -c "$database_query"
117
 }
122
 }
118
 
123
 
119
 function run_query_postgresql_with_output {
124
 function run_query_postgresql_with_output {
120
     database_name=$1
125
     database_name=$1
121
     database_query=$2
126
     database_query=$2
127
+    cd /etc/postgresql
122
     output=$(sudo -u postgres psql -d $database_name -c << EOF
128
     output=$(sudo -u postgres psql -d $database_name -c << EOF
123
 $database_query
129
 $database_query
124
 EOF
130
 EOF
129
 function initialise_database_postgresql {
135
 function initialise_database_postgresql {
130
     database_name=$1
136
     database_name=$1
131
     database_file=$2
137
     database_file=$2
138
+    cd /etc/postgresql
132
     sudo -u postgres psql $database_name < $database_file
139
     sudo -u postgres psql $database_name < $database_file
133
     if [ ! "$?" = "0" ]; then
140
     if [ ! "$?" = "0" ]; then
134
         exit 7238525
141
         exit 7238525
152
 flush privileges;
159
 flush privileges;
153
 quit" > $INSTALL_DIR/batch.sql
160
 quit" > $INSTALL_DIR/batch.sql
154
     chmod 600 $INSTALL_DIR/batch.sql
161
     chmod 600 $INSTALL_DIR/batch.sql
162
+    cd /etc/postgresql
155
     sudo -u postgres psql -d $database_name --file=$INSTALL_DIR/batch.sql
163
     sudo -u postgres psql -d $database_name --file=$INSTALL_DIR/batch.sql
156
     shred -zu $INSTALL_DIR/batch.sql
164
     shred -zu $INSTALL_DIR/batch.sql
157
 }
165
 }

+ 323
- 0
website/EN/app_peertube.html ファイルの表示

1
+<?xml version="1.0" encoding="utf-8"?>
2
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
+<head>
6
+<!-- 2017-12-01 Fri 10:41 -->
7
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
+<meta name="viewport" content="width=device-width, initial-scale=1" />
9
+<title>&lrm;</title>
10
+<meta name="generator" content="Org mode" />
11
+<meta name="author" content="Bob Mottram" />
12
+<meta name="description" content="How to use PeerTube"
13
+ />
14
+<meta name="keywords" content="freedombone, peertube" />
15
+<style type="text/css">
16
+ <!--/*--><![CDATA[/*><!--*/
17
+  .title  { text-align: center;
18
+             margin-bottom: .2em; }
19
+  .subtitle { text-align: center;
20
+              font-size: medium;
21
+              font-weight: bold;
22
+              margin-top:0; }
23
+  .todo   { font-family: monospace; color: red; }
24
+  .done   { font-family: monospace; color: green; }
25
+  .priority { font-family: monospace; color: orange; }
26
+  .tag    { background-color: #eee; font-family: monospace;
27
+            padding: 2px; font-size: 80%; font-weight: normal; }
28
+  .timestamp { color: #bebebe; }
29
+  .timestamp-kwd { color: #5f9ea0; }
30
+  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
31
+  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
32
+  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
33
+  .underline { text-decoration: underline; }
34
+  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
35
+  p.verse { margin-left: 3%; }
36
+  pre {
37
+    border: 1px solid #ccc;
38
+    box-shadow: 3px 3px 3px #eee;
39
+    padding: 8pt;
40
+    font-family: monospace;
41
+    overflow: auto;
42
+    margin: 1.2em;
43
+  }
44
+  pre.src {
45
+    position: relative;
46
+    overflow: visible;
47
+    padding-top: 1.2em;
48
+  }
49
+  pre.src:before {
50
+    display: none;
51
+    position: absolute;
52
+    background-color: white;
53
+    top: -10px;
54
+    right: 10px;
55
+    padding: 3px;
56
+    border: 1px solid black;
57
+  }
58
+  pre.src:hover:before { display: inline;}
59
+  /* Languages per Org manual */
60
+  pre.src-asymptote:before { content: 'Asymptote'; }
61
+  pre.src-awk:before { content: 'Awk'; }
62
+  pre.src-C:before { content: 'C'; }
63
+  /* pre.src-C++ doesn't work in CSS */
64
+  pre.src-clojure:before { content: 'Clojure'; }
65
+  pre.src-css:before { content: 'CSS'; }
66
+  pre.src-D:before { content: 'D'; }
67
+  pre.src-ditaa:before { content: 'ditaa'; }
68
+  pre.src-dot:before { content: 'Graphviz'; }
69
+  pre.src-calc:before { content: 'Emacs Calc'; }
70
+  pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
71
+  pre.src-fortran:before { content: 'Fortran'; }
72
+  pre.src-gnuplot:before { content: 'gnuplot'; }
73
+  pre.src-haskell:before { content: 'Haskell'; }
74
+  pre.src-hledger:before { content: 'hledger'; }
75
+  pre.src-java:before { content: 'Java'; }
76
+  pre.src-js:before { content: 'Javascript'; }
77
+  pre.src-latex:before { content: 'LaTeX'; }
78
+  pre.src-ledger:before { content: 'Ledger'; }
79
+  pre.src-lisp:before { content: 'Lisp'; }
80
+  pre.src-lilypond:before { content: 'Lilypond'; }
81
+  pre.src-lua:before { content: 'Lua'; }
82
+  pre.src-matlab:before { content: 'MATLAB'; }
83
+  pre.src-mscgen:before { content: 'Mscgen'; }
84
+  pre.src-ocaml:before { content: 'Objective Caml'; }
85
+  pre.src-octave:before { content: 'Octave'; }
86
+  pre.src-org:before { content: 'Org mode'; }
87
+  pre.src-oz:before { content: 'OZ'; }
88
+  pre.src-plantuml:before { content: 'Plantuml'; }
89
+  pre.src-processing:before { content: 'Processing.js'; }
90
+  pre.src-python:before { content: 'Python'; }
91
+  pre.src-R:before { content: 'R'; }
92
+  pre.src-ruby:before { content: 'Ruby'; }
93
+  pre.src-sass:before { content: 'Sass'; }
94
+  pre.src-scheme:before { content: 'Scheme'; }
95
+  pre.src-screen:before { content: 'Gnu Screen'; }
96
+  pre.src-sed:before { content: 'Sed'; }
97
+  pre.src-sh:before { content: 'shell'; }
98
+  pre.src-sql:before { content: 'SQL'; }
99
+  pre.src-sqlite:before { content: 'SQLite'; }
100
+  /* additional languages in org.el's org-babel-load-languages alist */
101
+  pre.src-forth:before { content: 'Forth'; }
102
+  pre.src-io:before { content: 'IO'; }
103
+  pre.src-J:before { content: 'J'; }
104
+  pre.src-makefile:before { content: 'Makefile'; }
105
+  pre.src-maxima:before { content: 'Maxima'; }
106
+  pre.src-perl:before { content: 'Perl'; }
107
+  pre.src-picolisp:before { content: 'Pico Lisp'; }
108
+  pre.src-scala:before { content: 'Scala'; }
109
+  pre.src-shell:before { content: 'Shell Script'; }
110
+  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
111
+  /* additional language identifiers per "defun org-babel-execute"
112
+       in ob-*.el */
113
+  pre.src-cpp:before  { content: 'C++'; }
114
+  pre.src-abc:before  { content: 'ABC'; }
115
+  pre.src-coq:before  { content: 'Coq'; }
116
+  pre.src-groovy:before  { content: 'Groovy'; }
117
+  /* additional language identifiers from org-babel-shell-names in
118
+     ob-shell.el: ob-shell is the only babel language using a lambda to put
119
+     the execution function name together. */
120
+  pre.src-bash:before  { content: 'bash'; }
121
+  pre.src-csh:before  { content: 'csh'; }
122
+  pre.src-ash:before  { content: 'ash'; }
123
+  pre.src-dash:before  { content: 'dash'; }
124
+  pre.src-ksh:before  { content: 'ksh'; }
125
+  pre.src-mksh:before  { content: 'mksh'; }
126
+  pre.src-posh:before  { content: 'posh'; }
127
+  /* Additional Emacs modes also supported by the LaTeX listings package */
128
+  pre.src-ada:before { content: 'Ada'; }
129
+  pre.src-asm:before { content: 'Assembler'; }
130
+  pre.src-caml:before { content: 'Caml'; }
131
+  pre.src-delphi:before { content: 'Delphi'; }
132
+  pre.src-html:before { content: 'HTML'; }
133
+  pre.src-idl:before { content: 'IDL'; }
134
+  pre.src-mercury:before { content: 'Mercury'; }
135
+  pre.src-metapost:before { content: 'MetaPost'; }
136
+  pre.src-modula-2:before { content: 'Modula-2'; }
137
+  pre.src-pascal:before { content: 'Pascal'; }
138
+  pre.src-ps:before { content: 'PostScript'; }
139
+  pre.src-prolog:before { content: 'Prolog'; }
140
+  pre.src-simula:before { content: 'Simula'; }
141
+  pre.src-tcl:before { content: 'tcl'; }
142
+  pre.src-tex:before { content: 'TeX'; }
143
+  pre.src-plain-tex:before { content: 'Plain TeX'; }
144
+  pre.src-verilog:before { content: 'Verilog'; }
145
+  pre.src-vhdl:before { content: 'VHDL'; }
146
+  pre.src-xml:before { content: 'XML'; }
147
+  pre.src-nxml:before { content: 'XML'; }
148
+  /* add a generic configuration mode; LaTeX export needs an additional
149
+     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
150
+  pre.src-conf:before { content: 'Configuration File'; }
151
+
152
+  table { border-collapse:collapse; }
153
+  caption.t-above { caption-side: top; }
154
+  caption.t-bottom { caption-side: bottom; }
155
+  td, th { vertical-align:top;  }
156
+  th.org-right  { text-align: center;  }
157
+  th.org-left   { text-align: center;   }
158
+  th.org-center { text-align: center; }
159
+  td.org-right  { text-align: right;  }
160
+  td.org-left   { text-align: left;   }
161
+  td.org-center { text-align: center; }
162
+  dt { font-weight: bold; }
163
+  .footpara { display: inline; }
164
+  .footdef  { margin-bottom: 1em; }
165
+  .figure { padding: 1em; }
166
+  .figure p { text-align: center; }
167
+  .inlinetask {
168
+    padding: 10px;
169
+    border: 2px solid gray;
170
+    margin: 10px;
171
+    background: #ffffcc;
172
+  }
173
+  #org-div-home-and-up
174
+   { text-align: right; font-size: 70%; white-space: nowrap; }
175
+  textarea { overflow-x: auto; }
176
+  .linenr { font-size: smaller }
177
+  .code-highlighted { background-color: #ffff00; }
178
+  .org-info-js_info-navigation { border-style: none; }
179
+  #org-info-js_console-label
180
+    { font-size: 10px; font-weight: bold; white-space: nowrap; }
181
+  .org-info-js_search-highlight
182
+    { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
184
+  /*]]>*/-->
185
+</style>
186
+<link rel="stylesheet" type="text/css" href="freedombone.css" />
187
+<script type="text/javascript">
188
+/*
189
+@licstart  The following is the entire license notice for the
190
+JavaScript code in this tag.
191
+
192
+Copyright (C) 2012-2017 Free Software Foundation, Inc.
193
+
194
+The JavaScript code in this tag is free software: you can
195
+redistribute it and/or modify it under the terms of the GNU
196
+General Public License (GNU GPL) as published by the Free Software
197
+Foundation, either version 3 of the License, or (at your option)
198
+any later version.  The code is distributed WITHOUT ANY WARRANTY;
199
+without even the implied warranty of MERCHANTABILITY or FITNESS
200
+FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
201
+
202
+As additional permission under GNU GPL version 3 section 7, you
203
+may distribute non-source (e.g., minimized or compacted) forms of
204
+that code without the copy of the GNU GPL normally required by
205
+section 4, provided you include this license notice and a URL
206
+through which recipients can access the Corresponding Source.
207
+
208
+
209
+@licend  The above is the entire license notice
210
+for the JavaScript code in this tag.
211
+*/
212
+<!--/*--><![CDATA[/*><!--*/
213
+ function CodeHighlightOn(elem, id)
214
+ {
215
+   var target = document.getElementById(id);
216
+   if(null != target) {
217
+     elem.cacheClassElem = elem.className;
218
+     elem.cacheClassTarget = target.className;
219
+     target.className = "code-highlighted";
220
+     elem.className   = "code-highlighted";
221
+   }
222
+ }
223
+ function CodeHighlightOff(elem, id)
224
+ {
225
+   var target = document.getElementById(id);
226
+   if(elem.cacheClassElem)
227
+     elem.className = elem.cacheClassElem;
228
+   if(elem.cacheClassTarget)
229
+     target.className = elem.cacheClassTarget;
230
+ }
231
+/*]]>*///-->
232
+</script>
233
+</head>
234
+<body>
235
+<div id="preamble" class="status">
236
+<a name="top" id="top"></a>
237
+</div>
238
+<div id="content">
239
+<div class="org-center">
240
+
241
+<div class="figure">
242
+<p><img src="images/logo.png" alt="logo.png" />
243
+</p>
244
+</div>
245
+</div>
246
+
247
+<center>
248
+<h1>PeerTube</h1>
249
+</center>
250
+
251
+<p>
252
+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.
253
+</p>
254
+
255
+<div class="org-center">
256
+
257
+<div class="figure">
258
+<p><img src="images/peertube.jpg" alt="peertube.jpg" />
259
+</p>
260
+</div>
261
+</div>
262
+
263
+<div id="outline-container-org89b3d26" class="outline-2">
264
+<h2 id="org89b3d26">Installation</h2>
265
+<div class="outline-text-2" id="text-org89b3d26">
266
+<p>
267
+Log into your system with:
268
+</p>
269
+
270
+<div class="org-src-container">
271
+<pre class="src src-bash">ssh myusername@mydomain -p 2222
272
+</pre>
273
+</div>
274
+
275
+<p>
276
+Using cursor keys, space bar and Enter key select <b>Administrator controls</b> and type in your password.
277
+</p>
278
+
279
+<p>
280
+Select <b>Add/Remove Apps</b> then <b>peertube</b>. You will then be asked for a domain name and if you are using FreeDNS also the code for the domain which can be found under <b>Dynamic DNS</b> on the FreeDNS site (the random string from "<i>quick cron example</i>" which appears after <i>update.php?</i> and before <i>&gt;&gt;</i>). For more details on obtaining a domain and making it accessible via dynamic DNS see the <a href="./faq.html">FAQ</a>. Typically the domain name you use will be a subdomain, such as <i>video.mydomainname.net</i>. It will need to be a domain which you have bought somewhere and own and not one of the FreeDNS subdomains, otherwise you won't be able to get a SSL/TLS certificate for it.
281
+</p>
282
+</div>
283
+</div>
284
+
285
+<div id="outline-container-orgc6d8e67" class="outline-2">
286
+<h2 id="orgc6d8e67">Initial setup</h2>
287
+<div class="outline-text-2" id="text-orgc6d8e67">
288
+<p>
289
+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.
290
+</p>
291
+
292
+<p>
293
+One thing to be aware of is that after you upload a video it will take quite a while to transcode, and during that time you won't be able to play it or it will hang after playing. A way to avoid this wait is to ensure that your videos are already in mp4 format when you upload them.
294
+</p>
295
+</div>
296
+</div>
297
+</div>
298
+<div id="postamble" class="status">
299
+
300
+<style type="text/css">
301
+.back-to-top {
302
+    position: fixed;
303
+    bottom: 2em;
304
+    right: 0px;
305
+    text-decoration: none;
306
+    color: #000000;
307
+    background-color: rgba(235, 235, 235, 0.80);
308
+    font-size: 12px;
309
+    padding: 1em;
310
+    display: none;
311
+}
312
+
313
+.back-to-top:hover {
314
+    background-color: rgba(135, 135, 135, 0.50);
315
+}
316
+</style>
317
+
318
+<div class="back-to-top">
319
+<a href="#top">Back to top</a> | <a href="mailto:bob@freedombone.net">E-mail me</a>
320
+</div>
321
+</div>
322
+</body>
323
+</html>

+ 124
- 112
website/EN/apps.html ファイルの表示

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
5
 <head>
6
-<!-- 2017-11-27 Mon 12:30 -->
6
+<!-- 2017-12-01 Fri 10:19 -->
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9
 <title>&lrm;</title>
9
 <title>&lrm;</title>
264
 </div>
264
 </div>
265
 </div>
265
 </div>
266
 
266
 
267
-<div id="outline-container-org6976750" class="outline-2">
268
-<h2 id="org6976750">CryptPad</h2>
269
-<div class="outline-text-2" id="text-org6976750">
267
+<div id="outline-container-orgf8331ba" class="outline-2">
268
+<h2 id="orgf8331ba">CryptPad</h2>
269
+<div class="outline-text-2" id="text-orgf8331ba">
270
 <p>
270
 <p>
271
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
271
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
272
 </p>
272
 </p>
276
 </p>
276
 </p>
277
 </div>
277
 </div>
278
 </div>
278
 </div>
279
-<div id="outline-container-org034a81a" class="outline-2">
280
-<h2 id="org034a81a">DLNA</h2>
281
-<div class="outline-text-2" id="text-org034a81a">
279
+<div id="outline-container-orgca21c4d" class="outline-2">
280
+<h2 id="orgca21c4d">DLNA</h2>
281
+<div class="outline-text-2" id="text-orgca21c4d">
282
 <p>
282
 <p>
283
 Enables you to use the system as a music server which any DLNA compatible devices can connect to within your home network.
283
 Enables you to use the system as a music server which any DLNA compatible devices can connect to within your home network.
284
 </p>
284
 </p>
288
 </p>
288
 </p>
289
 </div>
289
 </div>
290
 </div>
290
 </div>
291
-<div id="outline-container-orgd4981e7" class="outline-2">
292
-<h2 id="orgd4981e7">Dokuwiki</h2>
293
-<div class="outline-text-2" id="text-orgd4981e7">
291
+<div id="outline-container-org6f48ecb" class="outline-2">
292
+<h2 id="org6f48ecb">Dokuwiki</h2>
293
+<div class="outline-text-2" id="text-org6f48ecb">
294
 <p>
294
 <p>
295
 A databaseless wiki system.
295
 A databaseless wiki system.
296
 </p>
296
 </p>
300
 </p>
300
 </p>
301
 </div>
301
 </div>
302
 </div>
302
 </div>
303
-<div id="outline-container-org5c87cff" class="outline-2">
304
-<h2 id="org5c87cff">Emacs</h2>
305
-<div class="outline-text-2" id="text-org5c87cff">
303
+<div id="outline-container-org312cd59" class="outline-2">
304
+<h2 id="org312cd59">Emacs</h2>
305
+<div class="outline-text-2" id="text-org312cd59">
306
 <p>
306
 <p>
307
 If you use the Mutt client to read your email then this will set it up to use emacs for composing new mail.
307
 If you use the Mutt client to read your email then this will set it up to use emacs for composing new mail.
308
 </p>
308
 </p>
312
 </p>
312
 </p>
313
 </div>
313
 </div>
314
 </div>
314
 </div>
315
-<div id="outline-container-org8f6c5e6" class="outline-2">
316
-<h2 id="org8f6c5e6">Etherpad</h2>
317
-<div class="outline-text-2" id="text-org8f6c5e6">
315
+<div id="outline-container-org631741c" class="outline-2">
316
+<h2 id="org631741c">Etherpad</h2>
317
+<div class="outline-text-2" id="text-org631741c">
318
 <p>
318
 <p>
319
 Collaborate on creating documents in real time. Maybe you're planning a holiday with other family members or creating documentation for a Free Software project along with other volunteers. Etherpad is hard to beat for simplicity and speed. Only users of the system will be able to access it.
319
 Collaborate on creating documents in real time. Maybe you're planning a holiday with other family members or creating documentation for a Free Software project along with other volunteers. Etherpad is hard to beat for simplicity and speed. Only users of the system will be able to access it.
320
 </p>
320
 </p>
324
 </p>
324
 </p>
325
 </div>
325
 </div>
326
 </div>
326
 </div>
327
-<div id="outline-container-orgbda9945" class="outline-2">
328
-<h2 id="orgbda9945">Friendica</h2>
329
-<div class="outline-text-2" id="text-orgbda9945">
327
+<div id="outline-container-orgdeda776" class="outline-2">
328
+<h2 id="orgdeda776">Friendica</h2>
329
+<div class="outline-text-2" id="text-orgdeda776">
330
 <p>
330
 <p>
331
 Federated social network system.
331
 Federated social network system.
332
 </p>
332
 </p>
336
 </p>
336
 </p>
337
 </div>
337
 </div>
338
 </div>
338
 </div>
339
-<div id="outline-container-orgfe1de94" class="outline-2">
340
-<h2 id="orgfe1de94">Ghost</h2>
341
-<div class="outline-text-2" id="text-orgfe1de94">
339
+<div id="outline-container-orgbedc668" class="outline-2">
340
+<h2 id="orgbedc668">Ghost</h2>
341
+<div class="outline-text-2" id="text-orgbedc668">
342
 <p>
342
 <p>
343
 Modern looking blogging system.
343
 Modern looking blogging system.
344
 </p>
344
 </p>
348
 </p>
348
 </p>
349
 </div>
349
 </div>
350
 </div>
350
 </div>
351
-<div id="outline-container-orgdd6af7e" class="outline-2">
352
-<h2 id="orgdd6af7e">GNU Social</h2>
353
-<div class="outline-text-2" id="text-orgdd6af7e">
351
+<div id="outline-container-org43b36ad" class="outline-2">
352
+<h2 id="org43b36ad">GNU Social</h2>
353
+<div class="outline-text-2" id="text-org43b36ad">
354
 <p>
354
 <p>
355
 Federated social network based on the OStatus protocol. You can "<i>remote follow</i>" other users within the GNU Social federation.
355
 Federated social network based on the OStatus protocol. You can "<i>remote follow</i>" other users within the GNU Social federation.
356
 </p>
356
 </p>
360
 </p>
360
 </p>
361
 </div>
361
 </div>
362
 </div>
362
 </div>
363
-<div id="outline-container-org8f2e173" class="outline-2">
364
-<h2 id="org8f2e173">Gogs</h2>
365
-<div class="outline-text-2" id="text-org8f2e173">
363
+<div id="outline-container-orgd452cf4" class="outline-2">
364
+<h2 id="orgd452cf4">Gogs</h2>
365
+<div class="outline-text-2" id="text-orgd452cf4">
366
 <p>
366
 <p>
367
 Lightweight git project hosting system. You can mirror projects from Github, or if Github turns evil then just host your own projects while retaining the familiar <i>fork-and-pull</i> workflow. If you can use Github then you can also use Gogs.
367
 Lightweight git project hosting system. You can mirror projects from Github, or if Github turns evil then just host your own projects while retaining the familiar <i>fork-and-pull</i> workflow. If you can use Github then you can also use Gogs.
368
 </p>
368
 </p>
372
 </p>
372
 </p>
373
 </div>
373
 </div>
374
 </div>
374
 </div>
375
-<div id="outline-container-org8fd1e52" class="outline-2">
376
-<h2 id="org8fd1e52">HTMLy</h2>
377
-<div class="outline-text-2" id="text-org8fd1e52">
375
+<div id="outline-container-orgb5de05c" class="outline-2">
376
+<h2 id="orgb5de05c">HTMLy</h2>
377
+<div class="outline-text-2" id="text-orgb5de05c">
378
 <p>
378
 <p>
379
 Databaseless blogging system. Quite simple and with a markdown-like format.
379
 Databaseless blogging system. Quite simple and with a markdown-like format.
380
 </p>
380
 </p>
384
 </p>
384
 </p>
385
 </div>
385
 </div>
386
 </div>
386
 </div>
387
-<div id="outline-container-org70040fe" class="outline-2">
388
-<h2 id="org70040fe">Hubzilla</h2>
389
-<div class="outline-text-2" id="text-org70040fe">
387
+<div id="outline-container-org3a9c19a" class="outline-2">
388
+<h2 id="org3a9c19a">Hubzilla</h2>
389
+<div class="outline-text-2" id="text-org3a9c19a">
390
 <p>
390
 <p>
391
 Web publishing platform with social network like features and good privacy controls so that it's possible to specify who can see which content. Includes photo albums, calendar, wiki and file storage.
391
 Web publishing platform with social network like features and good privacy controls so that it's possible to specify who can see which content. Includes photo albums, calendar, wiki and file storage.
392
 </p>
392
 </p>
396
 </p>
396
 </p>
397
 </div>
397
 </div>
398
 </div>
398
 </div>
399
-<div id="outline-container-org64ccd5e" class="outline-2">
400
-<h2 id="org64ccd5e">Icecast media stream</h2>
401
-<div class="outline-text-2" id="text-org64ccd5e">
399
+<div id="outline-container-org8953dcb" class="outline-2">
400
+<h2 id="org8953dcb">Icecast media stream</h2>
401
+<div class="outline-text-2" id="text-org8953dcb">
402
 <p>
402
 <p>
403
 Make your own internet radio station.
403
 Make your own internet radio station.
404
 </p>
404
 </p>
408
 </p>
408
 </p>
409
 </div>
409
 </div>
410
 </div>
410
 </div>
411
-<div id="outline-container-org73319d7" class="outline-2">
412
-<h2 id="org73319d7">IRC Server (ngirc)</h2>
413
-<div class="outline-text-2" id="text-org73319d7">
411
+<div id="outline-container-org26745fc" class="outline-2">
412
+<h2 id="org26745fc">IRC Server (ngirc)</h2>
413
+<div class="outline-text-2" id="text-org26745fc">
414
 <p>
414
 <p>
415
 Run your own IRC chat channel which can be secured with a password and accessible via an onion address. A bouncer is included so that you can receive messages sent while you were offline. Works with Hexchat and other popular clients.
415
 Run your own IRC chat channel which can be secured with a password and accessible via an onion address. A bouncer is included so that you can receive messages sent while you were offline. Works with Hexchat and other popular clients.
416
 </p>
416
 </p>
420
 </p>
420
 </p>
421
 </div>
421
 </div>
422
 </div>
422
 </div>
423
-<div id="outline-container-orgd03beb7" class="outline-2">
424
-<h2 id="orgd03beb7">Jitsi Meet</h2>
425
-<div class="outline-text-2" id="text-orgd03beb7">
423
+<div id="outline-container-orgb904691" class="outline-2">
424
+<h2 id="orgb904691">Jitsi Meet</h2>
425
+<div class="outline-text-2" id="text-orgb904691">
426
 <p>
426
 <p>
427
 Experimental WebRTC video conferencing system, similar to Google Hangouts. This may not be fully functional, but is hoped to be in the near future.
427
 Experimental WebRTC video conferencing system, similar to Google Hangouts. This may not be fully functional, but is hoped to be in the near future.
428
 </p>
428
 </p>
429
 </div>
429
 </div>
430
 </div>
430
 </div>
431
 
431
 
432
-<div id="outline-container-org4b6a6a3" class="outline-2">
433
-<h2 id="org4b6a6a3">KanBoard</h2>
434
-<div class="outline-text-2" id="text-org4b6a6a3">
432
+<div id="outline-container-org7b034bc" class="outline-2">
433
+<h2 id="org7b034bc">KanBoard</h2>
434
+<div class="outline-text-2" id="text-org7b034bc">
435
 <p>
435
 <p>
436
 A simple kanban system for managing projects or TODO lists.
436
 A simple kanban system for managing projects or TODO lists.
437
 </p>
437
 </p>
441
 </p>
441
 </p>
442
 </div>
442
 </div>
443
 </div>
443
 </div>
444
-<div id="outline-container-orge157028" class="outline-2">
445
-<h2 id="orge157028">Key Server</h2>
446
-<div class="outline-text-2" id="text-orge157028">
444
+<div id="outline-container-org1c65b4a" class="outline-2">
445
+<h2 id="org1c65b4a">Key Server</h2>
446
+<div class="outline-text-2" id="text-org1c65b4a">
447
 <p>
447
 <p>
448
 An OpenPGP key server for storing and retrieving GPG public keys.
448
 An OpenPGP key server for storing and retrieving GPG public keys.
449
 </p>
449
 </p>
453
 </p>
453
 </p>
454
 </div>
454
 </div>
455
 </div>
455
 </div>
456
-<div id="outline-container-org090bd37" class="outline-2">
457
-<h2 id="org090bd37">Koel</h2>
458
-<div class="outline-text-2" id="text-org090bd37">
456
+<div id="outline-container-org0cbbb3a" class="outline-2">
457
+<h2 id="org0cbbb3a">Koel</h2>
458
+<div class="outline-text-2" id="text-org0cbbb3a">
459
 <p>
459
 <p>
460
 Access your music collection from any internet connected device.
460
 Access your music collection from any internet connected device.
461
 </p>
461
 </p>
465
 </p>
465
 </p>
466
 </div>
466
 </div>
467
 </div>
467
 </div>
468
-<div id="outline-container-org1c5934b" class="outline-2">
469
-<h2 id="org1c5934b">Lychee</h2>
470
-<div class="outline-text-2" id="text-org1c5934b">
468
+<div id="outline-container-orgd9ad54f" class="outline-2">
469
+<h2 id="orgd9ad54f">Lychee</h2>
470
+<div class="outline-text-2" id="text-orgd9ad54f">
471
 <p>
471
 <p>
472
 Make your photo albums available on the web.
472
 Make your photo albums available on the web.
473
 </p>
473
 </p>
477
 </p>
477
 </p>
478
 </div>
478
 </div>
479
 </div>
479
 </div>
480
-<div id="outline-container-org3cf360f" class="outline-2">
481
-<h2 id="org3cf360f">Mailpile</h2>
482
-<div class="outline-text-2" id="text-org3cf360f">
480
+<div id="outline-container-orge6a1bee" class="outline-2">
481
+<h2 id="orge6a1bee">Mailpile</h2>
482
+<div class="outline-text-2" id="text-orge6a1bee">
483
 <p>
483
 <p>
484
 Modern email client which supports GPG encryption.
484
 Modern email client which supports GPG encryption.
485
 </p>
485
 </p>
489
 </p>
489
 </p>
490
 </div>
490
 </div>
491
 </div>
491
 </div>
492
-<div id="outline-container-org62684b4" class="outline-2">
493
-<h2 id="org62684b4">Matrix</h2>
494
-<div class="outline-text-2" id="text-org62684b4">
492
+<div id="outline-container-org88a3c1b" class="outline-2">
493
+<h2 id="org88a3c1b">Matrix</h2>
494
+<div class="outline-text-2" id="text-org88a3c1b">
495
 <p>
495
 <p>
496
 Multi-user chat with some security and moderation controls.
496
 Multi-user chat with some security and moderation controls.
497
 </p>
497
 </p>
501
 </p>
501
 </p>
502
 </div>
502
 </div>
503
 </div>
503
 </div>
504
-<div id="outline-container-org67c8d9c" class="outline-2">
505
-<h2 id="org67c8d9c">Mediagoblin</h2>
506
-<div class="outline-text-2" id="text-org67c8d9c">
504
+<div id="outline-container-orgca43d7f" class="outline-2">
505
+<h2 id="orgca43d7f">Mediagoblin</h2>
506
+<div class="outline-text-2" id="text-orgca43d7f">
507
 <p>
507
 <p>
508
 Publicly host video and audio files so that you don't need to use YouTube/Vimeo/etc.
508
 Publicly host video and audio files so that you don't need to use YouTube/Vimeo/etc.
509
 </p>
509
 </p>
513
 </p>
513
 </p>
514
 </div>
514
 </div>
515
 </div>
515
 </div>
516
-<div id="outline-container-org35f9d59" class="outline-2">
517
-<h2 id="org35f9d59">Mumble</h2>
518
-<div class="outline-text-2" id="text-org35f9d59">
516
+<div id="outline-container-org8c5a11e" class="outline-2">
517
+<h2 id="org8c5a11e">Mumble</h2>
518
+<div class="outline-text-2" id="text-org8c5a11e">
519
 <p>
519
 <p>
520
 The popular VoIP and text chat system. Say goodbye to old-fashioned telephony conferences with silly dial codes. Also works well on mobile.
520
 The popular VoIP and text chat system. Say goodbye to old-fashioned telephony conferences with silly dial codes. Also works well on mobile.
521
 </p>
521
 </p>
525
 </p>
525
 </p>
526
 </div>
526
 </div>
527
 </div>
527
 </div>
528
-<div id="outline-container-org4e83692" class="outline-2">
529
-<h2 id="org4e83692">NextCloud</h2>
530
-<div class="outline-text-2" id="text-org4e83692">
528
+<div id="outline-container-org4a26fd8" class="outline-2">
529
+<h2 id="org4a26fd8">NextCloud</h2>
530
+<div class="outline-text-2" id="text-org4a26fd8">
531
 <p>
531
 <p>
532
 Store files on your server and sync them with laptops or mobile devices. Includes many plugins including videoconferencing and collaborative document editing.
532
 Store files on your server and sync them with laptops or mobile devices. Includes many plugins including videoconferencing and collaborative document editing.
533
 </p>
533
 </p>
537
 </p>
537
 </p>
538
 </div>
538
 </div>
539
 </div>
539
 </div>
540
-<div id="outline-container-org38f233d" class="outline-2">
541
-<h2 id="org38f233d">PI-Hole</h2>
542
-<div class="outline-text-2" id="text-org38f233d">
540
+<div id="outline-container-orgda0e181" class="outline-2">
541
+<h2 id="orgda0e181">PeerTube</h2>
542
+<div class="outline-text-2" id="text-orgda0e181">
543
+<p>
544
+Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better enables the streaming load to be shared across servers.
545
+</p>
546
+
547
+<p>
548
+<a href="./app_peertube.html">How to use it</a>
549
+</p>
550
+</div>
551
+</div>
552
+<div id="outline-container-orgfdd0292" class="outline-2">
553
+<h2 id="orgfdd0292">PI-Hole</h2>
554
+<div class="outline-text-2" id="text-orgfdd0292">
543
 <p>
555
 <p>
544
 The black hole for web adverts. Block adverts at the domain name level within your local network. It can significantly reduce bandwidth, speed up page load times and protect your systems from being tracked by spyware.
556
 The black hole for web adverts. Block adverts at the domain name level within your local network. It can significantly reduce bandwidth, speed up page load times and protect your systems from being tracked by spyware.
545
 </p>
557
 </p>
549
 </p>
561
 </p>
550
 </div>
562
 </div>
551
 </div>
563
 </div>
552
-<div id="outline-container-orgc0768d8" class="outline-2">
553
-<h2 id="orgc0768d8">Pleroma</h2>
554
-<div class="outline-text-2" id="text-orgc0768d8">
564
+<div id="outline-container-orga14f200" class="outline-2">
565
+<h2 id="orga14f200">Pleroma</h2>
566
+<div class="outline-text-2" id="text-orga14f200">
555
 <p>
567
 <p>
556
 Pleroma is an OStatus-compatible social networking server, compatible with GNU Social, PostActiv and Mastodon. It is high-performance and so is especially well suited for running on low power single board computers without much RAM.
568
 Pleroma is an OStatus-compatible social networking server, compatible with GNU Social, PostActiv and Mastodon. It is high-performance and so is especially well suited for running on low power single board computers without much RAM.
557
 </p>
569
 </p>
561
 </p>
573
 </p>
562
 </div>
574
 </div>
563
 </div>
575
 </div>
564
-<div id="outline-container-orgb849d85" class="outline-2">
565
-<h2 id="orgb849d85">PostActiv</h2>
566
-<div class="outline-text-2" id="text-orgb849d85">
576
+<div id="outline-container-org5e17da3" class="outline-2">
577
+<h2 id="org5e17da3">PostActiv</h2>
578
+<div class="outline-text-2" id="text-org5e17da3">
567
 <p>
579
 <p>
568
 An alternative federated social networking system compatible with GNU Social, Pleroma and Mastodon. It includes some optimisations and fixes currently not available within the main GNU Social project.
580
 An alternative federated social networking system compatible with GNU Social, Pleroma and Mastodon. It includes some optimisations and fixes currently not available within the main GNU Social project.
569
 </p>
581
 </p>
573
 </p>
585
 </p>
574
 </div>
586
 </div>
575
 </div>
587
 </div>
576
-<div id="outline-container-org1eccd38" class="outline-2">
577
-<h2 id="org1eccd38">Profanity</h2>
578
-<div class="outline-text-2" id="text-org1eccd38">
588
+<div id="outline-container-org517a50e" class="outline-2">
589
+<h2 id="org517a50e">Profanity</h2>
590
+<div class="outline-text-2" id="text-org517a50e">
579
 <p>
591
 <p>
580
 A shell based XMPP client which you can run on the Freedombone server via ssh.
592
 A shell based XMPP client which you can run on the Freedombone server via ssh.
581
 </p>
593
 </p>
585
 </p>
597
 </p>
586
 </div>
598
 </div>
587
 </div>
599
 </div>
588
-<div id="outline-container-org7ba8023" class="outline-2">
589
-<h2 id="org7ba8023">Riot Web</h2>
590
-<div class="outline-text-2" id="text-org7ba8023">
600
+<div id="outline-container-org0c8c8d9" class="outline-2">
601
+<h2 id="org0c8c8d9">Riot Web</h2>
602
+<div class="outline-text-2" id="text-org0c8c8d9">
591
 <p>
603
 <p>
592
 A browser based user interface for the Matrix federated communications system, including WebRTC audio and video chat.
604
 A browser based user interface for the Matrix federated communications system, including WebRTC audio and video chat.
593
 </p>
605
 </p>
597
 </p>
609
 </p>
598
 </div>
610
 </div>
599
 </div>
611
 </div>
600
-<div id="outline-container-orge5ba7bf" class="outline-2">
601
-<h2 id="orge5ba7bf">SearX</h2>
602
-<div class="outline-text-2" id="text-orge5ba7bf">
612
+<div id="outline-container-org0901ef0" class="outline-2">
613
+<h2 id="org0901ef0">SearX</h2>
614
+<div class="outline-text-2" id="text-org0901ef0">
603
 <p>
615
 <p>
604
 A metasearch engine for customised and private web searches.
616
 A metasearch engine for customised and private web searches.
605
 </p>
617
 </p>
609
 </p>
621
 </p>
610
 </div>
622
 </div>
611
 </div>
623
 </div>
612
-<div id="outline-container-org1ddca20" class="outline-2">
613
-<h2 id="org1ddca20">tt-rss</h2>
614
-<div class="outline-text-2" id="text-org1ddca20">
624
+<div id="outline-container-org6403f0a" class="outline-2">
625
+<h2 id="org6403f0a">tt-rss</h2>
626
+<div class="outline-text-2" id="text-org6403f0a">
615
 <p>
627
 <p>
616
 Private RSS reader. Pulls in RSS/Atom feeds via Tor and is only accessible via an onion address. Have "<i>the right to read</i>" without the Surveillance State knowing what you're reading. Also available with a user interface suitable for viewing on mobile devices via a browser such as OrFox.
628
 Private RSS reader. Pulls in RSS/Atom feeds via Tor and is only accessible via an onion address. Have "<i>the right to read</i>" without the Surveillance State knowing what you're reading. Also available with a user interface suitable for viewing on mobile devices via a browser such as OrFox.
617
 </p>
629
 </p>
621
 </p>
633
 </p>
622
 </div>
634
 </div>
623
 </div>
635
 </div>
624
-<div id="outline-container-org2602a28" class="outline-2">
625
-<h2 id="org2602a28">Syncthing</h2>
626
-<div class="outline-text-2" id="text-org2602a28">
636
+<div id="outline-container-orgdeec7a4" class="outline-2">
637
+<h2 id="orgdeec7a4">Syncthing</h2>
638
+<div class="outline-text-2" id="text-orgdeec7a4">
627
 <p>
639
 <p>
628
 Possibly the best way to synchronise files across all of your devices. Once it has been set up it "just works" with no user intervention needed.
640
 Possibly the best way to synchronise files across all of your devices. Once it has been set up it "just works" with no user intervention needed.
629
 </p>
641
 </p>
633
 </p>
645
 </p>
634
 </div>
646
 </div>
635
 </div>
647
 </div>
636
-<div id="outline-container-org80ed846" class="outline-2">
637
-<h2 id="org80ed846">Tahoe-LAFS</h2>
638
-<div class="outline-text-2" id="text-org80ed846">
648
+<div id="outline-container-org5a6843f" class="outline-2">
649
+<h2 id="org5a6843f">Tahoe-LAFS</h2>
650
+<div class="outline-text-2" id="text-org5a6843f">
639
 <p>
651
 <p>
640
 Robust and encrypted storage of files on one or more server.
652
 Robust and encrypted storage of files on one or more server.
641
 </p>
653
 </p>
645
 </p>
657
 </p>
646
 </div>
658
 </div>
647
 </div>
659
 </div>
648
-<div id="outline-container-orgdc397e9" class="outline-2">
649
-<h2 id="orgdc397e9">Tox</h2>
650
-<div class="outline-text-2" id="text-orgdc397e9">
660
+<div id="outline-container-org4e08973" class="outline-2">
661
+<h2 id="org4e08973">Tox</h2>
662
+<div class="outline-text-2" id="text-org4e08973">
651
 <p>
663
 <p>
652
 Client and bootstrap node for the Tox chat/VoIP system.
664
 Client and bootstrap node for the Tox chat/VoIP system.
653
 </p>
665
 </p>
657
 </p>
669
 </p>
658
 </div>
670
 </div>
659
 </div>
671
 </div>
660
-<div id="outline-container-org588d32f" class="outline-2">
661
-<h2 id="org588d32f">Turtl</h2>
662
-<div class="outline-text-2" id="text-org588d32f">
672
+<div id="outline-container-orgd3b3f1e" class="outline-2">
673
+<h2 id="orgd3b3f1e">Turtl</h2>
674
+<div class="outline-text-2" id="text-orgd3b3f1e">
663
 <p>
675
 <p>
664
 A system for privately creating and sharing notes and images, similar to Evernote but without the spying.
676
 A system for privately creating and sharing notes and images, similar to Evernote but without the spying.
665
 </p>
677
 </p>
669
 </p>
681
 </p>
670
 </div>
682
 </div>
671
 </div>
683
 </div>
672
-<div id="outline-container-org248d732" class="outline-2">
673
-<h2 id="org248d732">Vim</h2>
674
-<div class="outline-text-2" id="text-org248d732">
684
+<div id="outline-container-org823c7ff" class="outline-2">
685
+<h2 id="org823c7ff">Vim</h2>
686
+<div class="outline-text-2" id="text-org823c7ff">
675
 <p>
687
 <p>
676
 If you use the Mutt client to read your email then this will set it up to use vim for composing new mail.
688
 If you use the Mutt client to read your email then this will set it up to use vim for composing new mail.
677
 </p>
689
 </p>
678
 </div>
690
 </div>
679
 </div>
691
 </div>
680
 
692
 
681
-<div id="outline-container-org880e1f3" class="outline-2">
682
-<h2 id="org880e1f3">Virtual Private Network (VPN)</h2>
683
-<div class="outline-text-2" id="text-org880e1f3">
693
+<div id="outline-container-org3535c47" class="outline-2">
694
+<h2 id="org3535c47">Virtual Private Network (VPN)</h2>
695
+<div class="outline-text-2" id="text-org3535c47">
684
 <p>
696
 <p>
685
 Set up a VPN on your server so that you can bypass local internet censorship.
697
 Set up a VPN on your server so that you can bypass local internet censorship.
686
 </p>
698
 </p>
690
 </p>
702
 </p>
691
 </div>
703
 </div>
692
 </div>
704
 </div>
693
-<div id="outline-container-org3697e9f" class="outline-2">
694
-<h2 id="org3697e9f">XMPP</h2>
695
-<div class="outline-text-2" id="text-org3697e9f">
705
+<div id="outline-container-orgaadabb5" class="outline-2">
706
+<h2 id="orgaadabb5">XMPP</h2>
707
+<div class="outline-text-2" id="text-orgaadabb5">
696
 <p>
708
 <p>
697
 Chat server which can be used together with client such as Gajim or Conversations to provide end-to-end content security and also onion routed metadata security. Includes advanced features such as <i>client state notification</i> to save battery power on your mobile devices, support for seamless roaming between networks and <i>message carbons</i> so that you can receive the same messages while being simultaneously logged in to your account on more than one device.
709
 Chat server which can be used together with client such as Gajim or Conversations to provide end-to-end content security and also onion routed metadata security. Includes advanced features such as <i>client state notification</i> to save battery power on your mobile devices, support for seamless roaming between networks and <i>message carbons</i> so that you can receive the same messages while being simultaneously logged in to your account on more than one device.
698
 </p>
710
 </p>

+ 7
- 1
website/EN/armbian.html ファイルの表示

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
5
 <head>
6
-<!-- 2017-09-21 Thu 11:11 -->
6
+<!-- 2017-11-28 Tue 17:02 -->
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9
 <title>&lrm;</title>
9
 <title>&lrm;</title>
247
 
247
 
248
 <center><h1>Installing on Armbian</h1></center>
248
 <center><h1>Installing on Armbian</h1></center>
249
 
249
 
250
+<blockquote>
251
+<p>
252
+"<i>we are the music makers, we are the dreamers of dreams. cyberpunks and pirates. chaotic spectres hauting cyberspace. engineers, artists, hackers.</i>"
253
+</p>
254
+</blockquote>
255
+
250
 <p>
256
 <p>
251
 If you have a single board ARM computer which isn't one of the supported ones then you can probably still install Freedombone onto it if it has a <a href="https://www.armbian.com/download/">Debian Stretch Armbian image</a> available for it.
257
 If you have a single board ARM computer which isn't one of the supported ones then you can probably still install Freedombone onto it if it has a <a href="https://www.armbian.com/download/">Debian Stretch Armbian image</a> available for it.
252
 </p>
258
 </p>