fourier_install.sh 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. # version 1.0.2
  2. # install essential software
  3. # sudo apt-get update
  4. installer_version=1.0.3
  5. programspath=~/programs
  6. installerpath=$(pwd)
  7. configfile='/etc/fourier-config.json'
  8. gitbase="gogs@git.miralo.xyz:AudioValid"
  9. tunnel_user=rtunnel
  10. datapath='/var/fourier'
  11. serverhost='monitor.audiovalid.com'
  12. tunnelfile="$programspath/ssh-tunnel.sh"
  13. mysql_user=fourier
  14. mysql_passwd='Sup3rDuper!'
  15. mysql_db=fourier
  16. mount_point=/media/datadrive
  17. echo "Fourier installer $installer_version"
  18. echo "------------------------------------"
  19. if [[ "$OSTYPE" == darwin* ]]; then
  20. programspath=~/fourier
  21. fi
  22. clonerepo() {
  23. GIT_SSH_COMMAND="ssh -i $installerpath/repokey -o StrictHostKeychecking=no" \
  24. git clone $gitbase/$1 $2
  25. }
  26. [ ! -d "$programspath" ] && mkdir $programspath
  27. read -p "Whats this box port (last 3 numbers with zero for padding)? " PORT
  28. read -p "How many receivers has this box? " RECEIVERS_COUNT
  29. read -p "Box ID (or rolame url id): " BOX_ID
  30. curl -f -H "Accept: text/plain" "https://rola.me/$BOX_ID" \
  31. 1>/tmp/fourier-api \
  32. 2>/dev/null
  33. if [ "$?" -eq 0 ]; then
  34. IFS=':' read -ra APIDATA <<< "$(cat /tmp/fourier-api)"
  35. BOX_ID="${APIDATA[0]}"
  36. API_SECRET="${APIDATA[1]}"
  37. rm /tmp/fourier-api
  38. else
  39. read -p "API secret: " API_SECRET
  40. fi
  41. sudo apt-get install -y python python-pip
  42. findmnt "$mount_point"
  43. if [ "$?" -neq 0 ]; then
  44. echo -e 'Data drive is not mounted'
  45. fi
  46. if [[ "$OSTYPE" == darwin* ]]; then
  47. keyfile="$programspath/fourier.key"
  48. [ ! -f "$keyfile" ] && ssh-keygen -t rsa -b 2048 -f $keyfile
  49. else
  50. keyspath=~/.ssh
  51. keyfile="$keyspath/id_rsa"
  52. [ ! -d "$keyspath" ] && mkdir $keyspath
  53. ssh-keygen -t rsa -b 2048 -C "$HOSTNAME" -P "" -f $keyfile
  54. fi
  55. keycontent=$(cat $keyfile.pub)
  56. curl -X POST -F "key=$keycontent" \
  57. -H "Authorization: $BOX_ID $API_SECRET" \
  58. https://api.audiovalid.com/public-key
  59. # echo -e "\e[33mPlease add the following public key to server's authorized keys:\e[0m"
  60. # cat $keyfile.pub
  61. # read -p "Press enter to continue"
  62. if [[ "$OSTYPE" != darwin* ]]; then
  63. echo "/usr/bin/autossh -N -f -M 7$PORT -oPubkeyAuthentication=yes -oPasswordAuthentication=no -oLogLevel=error -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no -i $keyfile -R 6$PORT:localhost:22 $tunnel_user@$serverhost -p 22" > $tunnelfile
  64. sudo mv $installerpath/ssh-tunnel.service /etc/systemd/system/ssh-tunnel.service
  65. sudo systemctl enable ssh-tunnel
  66. sudo systemctl start ssh-tunnel
  67. read -p "que pasa aqui"
  68. fi
  69. if [[ "$OSTYPE" == darwin* ]]; then
  70. depend=( python gcc vim tmux autossh lame nodejs \
  71. ezstream libusb rtl-sdr portaudio )
  72. for dep in "${depend[@]}"
  73. do
  74. brew list $dep > /dev/null
  75. [ "$?" -eq 1 ] && brew install $dep
  76. done
  77. envpath="$programspath/env"
  78. [ ! -d "$envpath" ] && virtualenv $programspath/env
  79. source $envpath/bin/activate
  80. pip install -r $installerpath/requirements.txt
  81. else
  82. curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
  83. sudo apt-get install -y alsa-utils alsa-tools
  84. sudo apt-get install -y libudev-dev
  85. sudo apt-get install -y tmux
  86. sudo apt-get install -y vim
  87. sudo apt-get install -y autossh
  88. sudo apt-get install -y git-core
  89. sudo apt-get install -y build-essential
  90. sudo apt-get install -y nodejs
  91. sudo apt-get install -y python-dev
  92. sudo apt-get install -y lame
  93. sudo apt-get install -y ezstream
  94. sudo apt-get install -y cmake
  95. sudo apt-get install -y rtl-sdr
  96. sudo apt-get install -y sqlite3
  97. sudo apt-get install -y portaudio19-dev
  98. sudo pip install pyaudio pyusb pydub numpy requests \
  99. scipy python-firebase
  100. sudo apt-get install -y ffmpeg
  101. sudo apt-get install -y gfortran libopenblas-dev liblapack-dev
  102. sudo apt-get install -y python-matplotlib
  103. sudo apt-get install -y curl
  104. sudo pip install
  105. sudo npm install -g http-server
  106. cd tools
  107. sudo python ./setup.py install
  108. cd ..
  109. fi
  110. sudo chmod 0600 $installerpath/repokey
  111. cd $programspath
  112. clonerepo fourier-module.git module
  113. clonerepo fourier-common.git common
  114. clonerepo fourier-server.git server
  115. clonerepo fourier-fourier.git fourier
  116. clonerepo fourier-alt.git fourier-alt
  117. clonerepo fourier-monitor.git monitor
  118. clonerepo fourier-uploader.git uploader
  119. clonerepo fourier-ondemand.git ondemand
  120. cd $programspath/server
  121. npm install
  122. cd $programspath/monitor
  123. npm install
  124. cd $programspath/uploader
  125. npm install
  126. cd $programspath/module
  127. sudo python setup.py install
  128. cd $programspath/ondemand
  129. sudo python setup.py install
  130. sudo npm install -g pm2
  131. # build sdr lib
  132. if [[ "$OSTYPE" != darwin* ]]; then
  133. sudo apt-get install -y libusb-1.0-0-dev
  134. cd $programspath
  135. clonerepo rtl-sdr.git rtl-sdr
  136. cd $programspath/rtl-sdr
  137. mkdir build
  138. cd build
  139. cmake ../ -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ON
  140. make
  141. sudo cp ./src/rtl_fm /usr/bin/rtl_fm
  142. echo "SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE:="0666"" | sudo tee -a /etc/udev/rules.d/rtl-sdr.rules
  143. fi
  144. [ ! -f "$configfile" ] && \
  145. sudo python $installerpath/configure.py \
  146. $installerpath/fourier-config.json \
  147. $configfile \
  148. -programs "$programspath" \
  149. -receivers $RECEIVERS_COUNT \
  150. -api-secret $API_SECRET \
  151. -box-id "$BOX_ID"
  152. if [ "$?" -eq 0 ]; then
  153. cd "$programspath"
  154. pm2 start server
  155. pm2 start monitor
  156. pm2 start uploader
  157. pm2 start ondemand/ondemand/service.py \
  158. --interpreter=python \
  159. --name=ondemand
  160. pm2 start http-server
  161. pm2 save
  162. pm2 startup
  163. sudo env PATH=$PATH:/usr/bin \
  164. /usr/lib/node_modules/pm2/bin/pm2 \
  165. startup systemd -u fourier \
  166. --hp ~/
  167. fi
  168. if [[ "$OSTYPE" != darwin* ]]; then
  169. sudo mysql -u root -e "create database $mysql_db;"
  170. sudo mysql -u root -e "create user '$mysql_user'@'localhost' identified by '$mysql_passwd';"
  171. sudo mysql -u root -e "grant all privileges on $mysql_db.* to '$mysql_user'@'localhost';flush privileges;"
  172. cd ~
  173. sudo mysql -u root -h localhost $mysql_db < $installerpath/fourier.sql
  174. sudo cp $installerpath/fourier-key.json /etc/Fourier-key.json
  175. fi