Procházet zdrojové kódy

Add peertube to mesh client

Bob Mottram před 7 roky
rodič
revize
425cfdb5a1

+ 162
- 9
src/freedombone-app-peertube Zobrazit soubor

@@ -39,6 +39,7 @@ PEERTUBE_REPO="https://github.com/Chocobozzz/PeerTube"
39 39
 PEERTUBE_COMMIT='fef2c7164e025b12a64185dbab058ef4129733c6'
40 40
 PEERTUBE_ONION_PORT=8136
41 41
 PEERTUBE_PORT=9004
42
+MESH_PEERTUBE_PORT=8500
42 43
 PEERTUBE_DIR=/etc/peertube
43 44
 
44 45
 peertube_variables=(PEERTUBE_DOMAIN_NAME
@@ -479,21 +480,83 @@ function peertube_setup_web {
479 480
     nginx_ensite $PEERTUBE_DOMAIN_NAME
480 481
 }
481 482
 
483
+function mesh_peertube_setup_web {
484
+    peertube_nginx_file=$rootdir/etc/nginx/sites-available/peertube
485
+
486
+    echo 'server {' >> $peertube_nginx_file
487
+    echo "  listen $MESH_PEERTUBE_PORT http2;" >> $peertube_nginx_file
488
+    echo '  listen [::]:$MESH_PEERTUBE_PORT http2;' >> $peertube_nginx_file
489
+    echo '  server_name $HOSTNAME;' >> $peertube_nginx_file
490
+    echo '' >> $peertube_nginx_file
491
+    echo '  location / {' >> $peertube_nginx_file
492
+    echo "    proxy_pass http://localhost:${PEERTUBE_PORT};" >> $peertube_nginx_file
493
+    echo '    proxy_set_header X-Real-IP $remote_addr;' >> $peertube_nginx_file
494
+    echo '    proxy_set_header Host $host;' >> $peertube_nginx_file
495
+    echo '    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $peertube_nginx_file
496
+    echo '' >> $peertube_nginx_file
497
+    echo '    # For the video upload' >> $peertube_nginx_file
498
+    echo '    client_max_body_size 2G;' >> $peertube_nginx_file
499
+    echo '  }' >> $peertube_nginx_file
500
+    echo '' >> $peertube_nginx_file
501
+    echo '  location /static/webseed {' >> $peertube_nginx_file
502
+    echo "    if (\$request_method = 'OPTIONS') {" >> $peertube_nginx_file
503
+    echo "      add_header 'Access-Control-Allow-Origin' '*';" >> $peertube_nginx_file
504
+    echo "      add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';" >> $peertube_nginx_file
505
+    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
506
+    echo "      add_header 'Access-Control-Max-Age' 1728000;" >> $peertube_nginx_file
507
+    echo "      add_header 'Content-Type' 'text/plain charset=UTF-8';" >> $peertube_nginx_file
508
+    echo "      add_header 'Content-Length' 0;" >> $peertube_nginx_file
509
+    echo '      return 204;' >> $peertube_nginx_file
510
+    echo '    }' >> $peertube_nginx_file
511
+    echo '' >> $peertube_nginx_file
512
+    echo "    if (\$request_method = 'GET') {" >> $peertube_nginx_file
513
+    echo "      add_header 'Access-Control-Allow-Origin' '*';" >> $peertube_nginx_file
514
+    echo "      add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';" >> $peertube_nginx_file
515
+    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
516
+    echo '    }' >> $peertube_nginx_file
517
+    echo '' >> $peertube_nginx_file
518
+    echo "    alias $PEERTUBE_DIR/videos;" >> $peertube_nginx_file
519
+    echo '  }' >> $peertube_nginx_file
520
+    echo '' >> $peertube_nginx_file
521
+    echo '  # Websocket tracker' >> $peertube_nginx_file
522
+    echo '  location /tracker/socket {' >> $peertube_nginx_file
523
+    echo '    # Peers send a message to the tracker every 15 minutes' >> $peertube_nginx_file
524
+    echo '    # Dont close the websocket before this time' >> $peertube_nginx_file
525
+    echo '    proxy_read_timeout 1200s;' >> $peertube_nginx_file
526
+    echo '    proxy_set_header Upgrade $http_upgrade;' >> $peertube_nginx_file
527
+    echo '    proxy_set_header Connection "upgrade";' >> $peertube_nginx_file
528
+    echo '    proxy_http_version 1.1;' >> $peertube_nginx_file
529
+    echo '    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $peertube_nginx_file
530
+    echo '    proxy_set_header Host $host;' >> $peertube_nginx_file
531
+    echo "    proxy_pass http://localhost:${PEERTUBE_PORT};" >> $peertube_nginx_file
532
+    echo '  }' >> $peertube_nginx_file
533
+    echo '}' >> $peertube_nginx_file
534
+}
535
+
482 536
 function peertube_create_config {
483
-    peertube_config_file=$PEERTUBE_DIR/config/production.yaml
537
+    peertube_prefix=$1
538
+
539
+    peertube_config_file=$peertube_prefix$PEERTUBE_DIR/config/production.yaml
540
+
484 541
     echo 'listen:' > $peertube_config_file
485 542
     echo "  port: $PEERTUBE_PORT" >> $peertube_config_file
486 543
     echo '' >> $peertube_config_file
487 544
     echo '# Correspond to your reverse proxy "listen" configuration' >> $peertube_config_file
488 545
     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
546
+    if [ ! $peertube_prefix ]; then
547
+        if [[ $ONION_ONLY == 'no' ]]; then
548
+            echo '  https: true' >> $peertube_config_file
549
+            echo "  hostname: '$PEERTUBE_DOMAIN_NAME'" >> $peertube_config_file
550
+            echo '  port: 443' >> $peertube_config_file
551
+        else
552
+            echo '  https: false' >> $peertube_config_file
553
+            echo "  hostname: '$PEERTUBE_ONION_HOSTNAME'" >> $peertube_config_file
554
+            echo '  port: 80' >> $peertube_config_file
555
+        fi
493 556
     else
494 557
         echo '  https: false' >> $peertube_config_file
495
-        echo "  hostname: '$PEERTUBE_ONION_HOSTNAME'" >> $peertube_config_file
496
-        echo '  port: 80' >> $peertube_config_file
558
+        echo "  hostname: ''" >> $peertube_config_file
559
+        echo "  port: $MESH_PEERTUBE_PORT" >> $peertube_config_file
497 560
     fi
498 561
     echo '' >> $peertube_config_file
499 562
     echo '# Your database name will be "peertube"+database.suffix' >> $peertube_config_file
@@ -502,7 +565,11 @@ function peertube_create_config {
502 565
     echo '  port: 5432' >> $peertube_config_file
503 566
     echo "  suffix: ''" >> $peertube_config_file
504 567
     echo "  username: 'peertube'" >> $peertube_config_file
505
-    echo "  password: '$PEERTUBE_ADMIN_PASSWORD'" >> $peertube_config_file
568
+    if [ ! $peertube_prefix ]; then
569
+        echo "  password: '$PEERTUBE_ADMIN_PASSWORD'" >> $peertube_config_file
570
+    else
571
+        echo "  password: ''" >> $peertube_config_file
572
+    fi
506 573
     echo '' >> $peertube_config_file
507 574
     echo '# From the project root directory' >> $peertube_config_file
508 575
     echo 'storage:' >> $peertube_config_file
@@ -519,7 +586,7 @@ function peertube_create_config {
519 586
     echo '    size: 10 # Max number of previews you want to cache' >> $peertube_config_file
520 587
     echo '' >> $peertube_config_file
521 588
     echo 'admin:' >> $peertube_config_file
522
-    echo "  email: '$MY_EMAIL_ADDRESS'" >> $peertube_config_file
589
+    echo "  email: 'root@local'" >> $peertube_config_file
523 590
     echo '' >> $peertube_config_file
524 591
     echo 'signup:' >> $peertube_config_file
525 592
     echo '  enabled: true' >> $peertube_config_file
@@ -543,7 +610,93 @@ function peertube_create_config {
543 610
     echo '    1080p: false' >> $peertube_config_file
544 611
 }
545 612
 
613
+function mesh_install_peertube {
614
+    if [[ $VARIANT != "meshclient" && $VARIANT != "meshusb" ]]; then
615
+        return
616
+    fi
617
+
618
+    chroot "$rootdir" apt-get -yq install ffmpeg
619
+
620
+    function_check install_postgresql
621
+    install_postgresql
622
+
623
+    if [ -d $rootdir$PEERTUBE_DIR ]; then
624
+        rm -rf $rootdir$PEERTUBE_DIR
625
+    fi
626
+
627
+    chroot "$rootdir" groupadd peertube
628
+    chroot "$rootdir" useradd -c "PeerTube system account" -d $PEERTUBE_DIR -m -r -g peertube peertube
629
+
630
+    #peertube_create_database
631
+
632
+    git clone $PEERTUBE_REPO $rootdir$PEERTUBE_DIR
633
+
634
+    cd $rootdir$PEERTUBE_DIR
635
+    git checkout $PEERTUBE_COMMIT -b $PEERTUBE_COMMIT
636
+
637
+    get_npm_arch
638
+
639
+    cat <<EOF > $rootdir/usr/bin/install_peertube
640
+#!/bin/bash
641
+cd $PEERTUBE_DIR
642
+npm install --arch=$NPM_ARCH -g yarn
643
+if [ ! "$?" = "0" ]; then
644
+    echo $'PeerTube Failed to install yarn'
645
+    exit 79353234
646
+fi
647
+yarn add -D webpack --network-concurrency 1
648
+yarn install
649
+if [ ! "$?" = "0" ]; then
650
+    echo $'PeerTube Failed to run yarn install'
651
+    exit 63754235
652
+fi
653
+npm install --arch=$NPM_ARCH
654
+if [ ! "$?" = "0" ]; then
655
+    echo $'PeerTube Failed to install peertube'
656
+    exit 7835243
657
+fi
658
+npm run build --arch=$NPM_ARCH
659
+if [ ! "$?" = "0" ]; then
660
+    echo $'PeerTube Failed to build peertube'
661
+    exit 5293593
662
+fi
663
+EOF
664
+    chmod +x $rootdir/usr/bin/install_peertube
665
+    chroot "$rootdir" /usr/bin/install_peertube
666
+
667
+    echo '[Unit]' > $rootdir/etc/systemd/system/peertube.service
668
+    echo 'Description=PeerTube Decentralized video streaming platform' >> $rootdir/etc/systemd/system/peertube.service
669
+    echo 'After=syslog.target' >> $rootdir/etc/systemd/system/peertube.service
670
+    echo 'After=network.target' >> $rootdir/etc/systemd/system/peertube.service
671
+    echo '' >> $rootdir/etc/systemd/system/peertube.service
672
+    echo '[Service]' >> $rootdir/etc/systemd/system/peertube.service
673
+    echo 'User=peertube' >> $rootdir/etc/systemd/system/peertube.service
674
+    echo 'Group=peertube' >> $rootdir/etc/systemd/system/peertube.service
675
+    echo "WorkingDirectory=$PEERTUBE_DIR" >> $rootdir/etc/systemd/system/peertube.service
676
+    echo "ExecStart=/usr/local/bin/npm start" >> $rootdir/etc/systemd/system/peertube.service
677
+    echo "ExecStop=/usr/local/bin/npm stop" >> $rootdir/etc/systemd/system/peertube.service
678
+    echo 'StandardOutput=syslog' >> $rootdir/etc/systemd/system/peertube.service
679
+    echo 'StandardError=syslog' >> $rootdir/etc/systemd/system/peertube.service
680
+    echo 'SyslogIdentifier=peertube' >> $rootdir/etc/systemd/system/peertube.service
681
+    echo 'Restart=always' >> $rootdir/etc/systemd/system/peertube.service
682
+    echo "Environment=NODE_ENV=production" >> $rootdir/etc/systemd/system/peertube.service
683
+    echo '' >> $rootdir/etc/systemd/system/peertube.service
684
+    echo '[Install]' >> $rootdir/etc/systemd/system/peertube.service
685
+    echo 'WantedBy=multi-user.target' >> $rootdir/etc/systemd/system/peertube.service
686
+
687
+    peertube_create_config $rootdir
688
+
689
+    chroot "$rootdir" chown -R peertube:peertube $PEERTUBE_DIR
690
+
691
+    mesh_peertube_setup_web
692
+}
693
+
546 694
 function install_peertube {
695
+    if [[ $VARIANT == "mesh"* ]]; then
696
+        mesh_install_peertube
697
+        return
698
+    fi
699
+
547 700
     if [ ! $ONION_ONLY ]; then
548 701
         ONION_ONLY='no'
549 702
     fi

+ 30
- 0
src/freedombone-image-customise Zobrazit soubor

@@ -705,6 +705,7 @@ initialise_mesh() {
705 705
     install_web_server
706 706
     install_pelican
707 707
     mesh_install_cryptpad
708
+    mesh_install_peertube
708 709
     if [ $ENABLE_ZERONET ]; then
709 710
         install_zeronet
710 711
     fi
@@ -960,6 +961,35 @@ if [ \$no_of_users -gt 0 ]; then
960 961
         fi
961 962
     fi
962 963
 
964
+    if [ ! -f /home/$MY_USERNAME/.peertube.desktop ]; then
965
+        if [ ! -f /home/$MY_USERNAME/Desktop/peertube.desktop ]; then
966
+            echo '[Desktop Entry]' > /home/$MY_USERNAME/Desktop/peertube.desktop
967
+            echo 'Name=PeerTube' >> /home/$MY_USERNAME/Desktop/peertube.desktop
968
+            echo 'Type=Application' >> /home/$MY_USERNAME/Desktop/peertube.desktop
969
+            echo 'Comment=Upload and view videos on the mesh' >> /home/$MY_USERNAME/Desktop/peertube.desktop
970
+            echo 'Comment[el]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
971
+            echo 'Comment[ar]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
972
+            echo 'Comment[ca]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
973
+            echo 'Comment[hi]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
974
+            echo 'Comment[fr]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
975
+            echo 'Comment[de]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
976
+            echo 'Comment[es]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
977
+            echo 'Comment[it]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
978
+            echo 'Comment[ru]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
979
+            echo 'Comment[zh]=' >> /home/$MY_USERNAME/Desktop/peertube.desktop
980
+            echo "Exec=$BROWSER $BROWSER_OPTIONS http://\${HOSTNAME}.local:$MESH_PEERTUBE_PORT" >> /home/$MY_USERNAME/Desktop/peertube.desktop
981
+            echo "Icon=/usr/share/$PROJECT_NAME/avatars/icon_peertube.png" >> /home/$MY_USERNAME/Desktop/peertube.desktop
982
+            echo 'Terminal=false' >> /home/$MY_USERNAME/Desktop/peertube.desktop
983
+            echo 'Categories=Application;' >> /home/$MY_USERNAME/Desktop/peertube.desktop
984
+            chmod +x /home/$MY_USERNAME/Desktop/peertube.desktop
985
+            chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Desktop/peertube.desktop
986
+        else
987
+            if ! grep -q "\${HOSTNAME}.local" /home/$MY_USERNAME/Desktop/peertube.desktop; then
988
+                sed -i "s|Exec=.*|Exec=$BROWSER $BROWSER_OPTIONS http://\${HOSTNAME}.local:$MESH_PEERTUBE_PORT|g" /home/$MY_USERNAME/Desktop/peertube.desktop
989
+            fi
990
+        fi
991
+    fi
992
+
963 993
     if [ ! -f /home/$MY_USERNAME/Desktop/social.desktop ]; then
964 994
         echo '[Desktop Entry]' > /home/$MY_USERNAME/Desktop/social.desktop
965 995
         echo 'Name=Social' >> /home/$MY_USERNAME/Desktop/social.desktop

+ 57
- 1
src/freedombone-image-mesh Zobrazit soubor

@@ -88,6 +88,59 @@ SCUTTLEBOT_PORT=8010
88 88
 CRYPTPAD_PORT=9003
89 89
 CRYPTPAD_DIR=/etc/cryptpad
90 90
 
91
+PEERTUBE_DIR=/etc/peertube
92
+
93
+function run_system_query_postgresql {
94
+    query=$1
95
+    cd /etc/postgresql
96
+    sudo -u postgres psql -c "$query"
97
+}
98
+
99
+function create_password {
100
+    openssl rand -base64 32 | tr -dc A-Za-z0-9 | head -c ${1} ; echo -n ''
101
+}
102
+
103
+function enable_peertube {
104
+    if [ ! -d $PEERTUBE_DIR ]; then
105
+        return
106
+    fi
107
+
108
+    PEERTUBE_ADMIN_PASSWORD="$(create_password 10)"
109
+
110
+    if [ -d $PEERTUBE_DIR/videos ]; then
111
+        rm -rf $PEERTUBE_DIR/videos/*
112
+    fi
113
+    if [ -d $PEERTUBE_DIR/thumbnails ]; then
114
+        rm -rf $PEERTUBE_DIR/thumbnails/*
115
+    fi
116
+
117
+    systemctl restart postgresql
118
+    run_system_query_postgresql "DROP DATABASE peertube;"
119
+    run_system_query_postgresql "CREATE USER peertube WITH PASSWORD '$PEERTUBE_ADMIN_PASSWORD';"
120
+    run_system_query_postgresql "CREATE DATABASE peertube OWNER peertube;"
121
+    run_system_query_postgresql "GRANT ALL PRIVILEGES ON DATABASE peertube to peertube;"
122
+    run_system_query_postgresql "set statement_timeout to 40000;"
123
+
124
+    peertube_config_file=$PEERTUBE_DIR/config/production.yaml
125
+    sed -i "s|hostname:.*|hostname: 'P$PEER_ID.local'|g" $peertube_config_file
126
+    sed -i "s|password:.*|password: '$PEERTUBE_ADMIN_PASSWORD'|g" $peertube_config_file
127
+
128
+    peertube_nginx_file=/etc/nginx/sites-available/peertube
129
+    sed -i "s|server_name.*|server_name P$PEER_ID.local;|g" $peertube_nginx_file
130
+
131
+    chown -R peertube:peertube $PEERTUBE_DIR
132
+
133
+    # Set up the web server
134
+    ln -s /etc/nginx/sites-available/peertube /etc/nginx/sites-enabled/peertube
135
+    if [ -f /etc/nginx/sites-enabled/default ]; then
136
+        rm /etc/nginx/sites-enabled/default
137
+    fi
138
+
139
+    systemctl enable peertube
140
+    systemctl daemon-reload
141
+    systemctl start peertube
142
+}
143
+
91 144
 function enable_cryptpad {
92 145
     if [ ! -d $CRYPTPAD_DIR ]; then
93 146
         return
@@ -95,7 +148,9 @@ function enable_cryptpad {
95 148
 
96 149
     # Set up the web server
97 150
     ln -s /etc/nginx/sites-available/cryptpad /etc/nginx/sites-enabled/cryptpad
98
-    rm /etc/nginx/sites-enabled/default
151
+    if [ -f /etc/nginx/sites-enabled/default ]; then
152
+        rm /etc/nginx/sites-enabled/default
153
+    fi
99 154
 
100 155
     if [ ! -d $CRYPTPAD_DIR/customize/api ]; then
101 156
         mkdir -p $CRYPTPAD_DIR/customize/api
@@ -1042,6 +1097,7 @@ if [ -f $MESH_INSTALL_SETUP ]; then
1042 1097
     initialise_scuttlebot_pub
1043 1098
     setup_ipfs
1044 1099
     enable_cryptpad
1100
+    enable_peertube
1045 1101
     mesh_amnesic
1046 1102
     make_root_read_only
1047 1103
 

+ 23
- 3
src/freedombone-utils-postgresql Zobrazit soubor

@@ -30,6 +30,7 @@
30 30
 
31 31
 # Set this when calling backup and restore commands
32 32
 USE_POSTGRESQL=
33
+POSTGRESQL_PACKAGES='postgresql-9.6 postgresql-contrib-9.6 postgresql-client'
33 34
 
34 35
 function store_original_postgresql_password {
35 36
     if [ ! -f /root/.postgresqloriginal ]; then
@@ -48,7 +49,26 @@ function get_postgresql_password {
48 49
     fi
49 50
 }
50 51
 
52
+function mesh_install_postgresql {
53
+    chroot "$rootdir" apt-get -yq install $POSTGRESQL_PACKAGES
54
+
55
+    if [ ! -d $rootdir/etc/postgresql ]; then
56
+        echo $"ERROR: postgresql does not appear to have installed."
57
+        exit 78352
58
+    fi
59
+
60
+    if [ ! -f $rootdir/usr/bin/psql ]; then
61
+        echo $"ERROR: psql command does not appear to have installed."
62
+        exit 835290
63
+    fi
64
+}
65
+
51 66
 function install_postgresql {
67
+    if [[ $VARIANT == "mesh"* ]]; then
68
+        mesh_install_postgresql
69
+        return
70
+    fi
71
+
52 72
     if [[ $(is_completed $FUNCNAME) == "1" ]]; then
53 73
         return
54 74
     fi
@@ -64,7 +84,7 @@ function install_postgresql {
64 84
     fi
65 85
     ${PROJECT_NAME}-pass -u root -a postgresql -p "$POSTGRESQL_PASSWORD"
66 86
 
67
-    apt-get -yq install postgresql-9.6 postgresql-contrib-9.6 postgresql-client
87
+    apt-get -yq install $POSTGRESQL_PACKAGES
68 88
     apt-get -yq remove --purge apache2-bin*
69 89
     if [ -d /etc/apache2 ]; then
70 90
         rm -rf /etc/apache2
@@ -72,12 +92,12 @@ function install_postgresql {
72 92
     fi
73 93
 
74 94
     if [ ! -d /etc/postgresql ]; then
75
-        echo $"ERROR: postgresql does not appear to have installed. $CHECK_MESSAGE"
95
+        echo $"ERROR: postgresql does not appear to have installed."
76 96
         exit 78352
77 97
     fi
78 98
 
79 99
     if [ ! -f /usr/bin/psql ]; then
80
-        echo $"ERROR: psql command does not appear to have installed. $CHECK_MESSAGE"
100
+        echo $"ERROR: psql command does not appear to have installed."
81 101
         exit 835290
82 102
     fi
83 103