Guest User

Untitled

a guest
Jan 22nd, 2016
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 17.28 KB | None | 0 0
  1. #!/bin/bash
  2. #
  3. #Compile and Install transmission bittorrent client on mybooklive
  4. #
  5. #Author: Proglin 2015-09-10
  6. #
  7. # Note:
  8. #   I strong recommend you to download an update firmware
  9. #   Save it in public folder
  10. #   If anything goes wrong you can update your firmware to clean the mess using:
  11. # /usr/local/sbin/updateFirmwareFromFile.sh /DataVolume/shares/Public/apnc-024310-048-20150507.deb
  12. #
  13. # References:
  14. #https://trac.transmissionbt.com/wiki/Building#DebianSqueeze
  15. #https://trac.transmissionbt.com/wiki/Scripts/initd
  16. #http://falkhusemann.de/blog/2012/05/compiling-transmission-bittorrent-for-debiand/
  17. #http://community.wd.com/t5/My-Book-Live/GUIDE-How-to-unbrick-a-totally-dead-MBL/td-p/435724
  18. #http://support.wd.com/product/download.asp?groupid=902&sid=132&lang=en
  19. start=$SECONDS
  20.  
  21. # CONFIGURATION TRANSMISSION VERSION
  22. TRANSMISSIONSOURCE='http://download.transmissionbt.com/files/transmission-2.84.tar.xz'
  23.  
  24. # EXTRA CONFIGURATIONS
  25. #TMPFOLDER='/root/temp'
  26. #LIBEVENTSOURCE='http://sourceforge.net/projects/levent/files/libevent/libevent-2.0/libevent-2.0.18-stable.tar.gz'
  27. LIBEVENTSOURCE='http://sourceforge.net/projects/levent/files/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz'
  28.  
  29. #Change TMP Folder to have more space!
  30. TMPFOLDER='/shares/Public/tmpCompile'
  31. TMP=$TMPFOLDER
  32. TEMP=$TMPFOLDER
  33. TMPDIR=$TMPFOLDER
  34. export TMPDIR TMP TEMP
  35.  
  36. clear
  37. echo "Welcome! Compile and Install Transmission 2.84"
  38. echo "Created by Proglin v2015-09-10"
  39. echo "ALWAYS back up your data before proceeding."
  40. echo "This script was only tested with MyBookLive firmware 02.43.10-048"
  41. printf "Your firmware version is: ";tail -1 /var/log/version.log
  42. echo ""
  43. echo "We are going to change some configs to install Tranmission"
  44. read -p "This process takes around 30 minutes. Are you sure? (Y/N)" -n 1 -r
  45. echo # (optional) move to a new line
  46.  
  47. if [[ $REPLY =~ ^[Nn]$ ]]
  48. then
  49.     echo "OK. Exiting."
  50.     exit
  51. fi
  52.  
  53. mkdir -p $TMPFOLDER
  54. if [[ $? > 0 ]]
  55. then
  56.     echo "The command failed, exiting." ; exit
  57. fi
  58.  
  59. rm -f /var/lib/dpkg/info/wd-nas.*
  60. cp /etc/apt/sources.list $TMPFOLDER/sources.list.bak
  61. echo ""
  62. printf "1/21 Configuring repositories... (part 1/3)"
  63. APTSOURCESOLD="#Modified to install Transmission (old packages)
  64. deb http://archive.debian.org/debian/ squeeze main
  65. deb-src http://archive.debian.org/debian/ squeeze main
  66. #deb http://ftp.br.debian.org/debian/ wheezy main
  67. #deb-src http://ftp.br.debian.org/debian/ wheezy main\n"
  68. printf "$APTSOURCESOLD" > /etc/apt/sources.list
  69.  
  70. apt-get -qq clean
  71. apt-get -qq update >/dev/null 2>&1
  72. if [[ $? > 0 ]]
  73. then
  74.     echo "The command failed, exiting." ; exit
  75. else
  76.     echo " OK!"
  77. fi
  78.  
  79. printf "2/21 Installing packages... (part 1/6)"
  80. apt-get -q -y --force-yes --allow-unauthenticated -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -o Dpkg::Options::="--force-overwrite" install tar >/dev/null 2>&1
  81. if [[ $? > 0 ]]
  82. then
  83.     echo "The command failed, exiting." ; exit
  84. else
  85.     echo " OK!"
  86. fi
  87.  
  88. printf "3/21 Installing packages... (part 2/6)"
  89. apt-get -q -y --force-yes --allow-unauthenticated -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -o Dpkg::Options::="--force-overwrite" install ca-certificates >/dev/null 2>&1
  90. if [[ $? > 0 ]]
  91. then
  92.     echo "The command failed, exiting." ; exit
  93. else
  94.     echo " OK!"
  95. fi
  96.  
  97. printf "4/21 Installing packages... (part 3/6)"
  98. apt-get -q -y --force-yes --allow-unauthenticated -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -o Dpkg::Options::="--force-overwrite" install intltool >/dev/null 2>&1
  99. if [[ $? > 0 ]]
  100. then
  101.     echo "The command failed, exiting." ; exit
  102. else
  103.     echo " OK!"
  104. fi
  105.  
  106. printf "5/21 Installing packages... (part 4/6)"
  107. apt-get -q -y --force-yes --allow-unauthenticated -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -o Dpkg::Options::="--force-overwrite" install build-essential >/dev/null 2>&1
  108. if [[ $? > 0 ]]
  109. then
  110.     echo "The command failed, exiting." ; exit
  111. else
  112.     echo " OK!"
  113. fi
  114.  
  115. printf "6/21 Configuring repositories... (part 2/3)"
  116. APTSOURCESNEW="#Modified to install Transmission (new packages)
  117. #deb http://archive.debian.org/debian/ squeeze main
  118. #deb-src http://archive.debian.org/debian/ squeeze main
  119. deb http://ftp.br.debian.org/debian/ wheezy main
  120. deb-src http://ftp.br.debian.org/debian/ wheezy main\n"
  121. printf "$APTSOURCESNEW" > /etc/apt/sources.list
  122. apt-get -qq clean
  123. apt-get -qq update 2>/dev/null
  124. if [[ $? > 0 ]]
  125. then
  126.     echo "The command failed, exiting." ; exit
  127. else
  128.     echo " OK!"
  129. fi
  130.  
  131. printf "7/21 Installing packages... (part 5/6)"
  132. export DEBIAN_FRONTEND=noninteractive
  133. apt-get -qq -y --force-yes --allow-unauthenticated -o Dpkg::Options::="--force-confold" -o Dpkg::Options::="--force-overwrite" -o Dpkg::Options::="--force-confdef" install libssl-dev >/dev/null 2>&1
  134. if [[ $? > 0 ]]
  135. then
  136.     echo "The command failed, exiting." ; exit
  137. else
  138.     echo " OK!"
  139. fi
  140.  
  141. printf "8/21 Configuring repositories... (part 3/3)"
  142. APTSOURCESOLD="#Modified to install Transmission (old packages)
  143. deb http://archive.debian.org/debian/ squeeze main
  144. deb-src http://archive.debian.org/debian/ squeeze main
  145. #deb http://ftp.br.debian.org/debian/ wheezy main
  146. #deb-src http://ftp.br.debian.org/debian/ wheezy main\n"
  147. printf "$APTSOURCESOLD" > /etc/apt/sources.list
  148.  
  149. apt-get -qq clean
  150. apt-get -qq update >/dev/null 2>&1
  151. if [[ $? > 0 ]]
  152. then
  153.     echo "The command failed, exiting." ; exit
  154. else
  155.     echo " OK!"
  156. fi
  157.  
  158. printf "9/21 Installing packages... (part 6/6)"
  159. apt-get -q -y --force-yes --allow-unauthenticated -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -o Dpkg::Options::="--force-overwrite" install libcurl4-openssl-dev >/dev/null 2>&1
  160. if [[ $? > 0 ]]
  161. then
  162.     echo "The command failed, exiting." ; exit
  163. else
  164.     echo " OK!"
  165. fi
  166.  
  167. printf "10/21 Downloading sources of LIBEVENT..."
  168. #Getting sources of Transmission and LibEvent
  169. wget -q -P $TMPFOLDER $LIBEVENTSOURCE >/dev/null 2>&1
  170. if [[ $? > 0 ]]
  171. then
  172.     echo "The command failed, exiting." ; exit
  173. fi
  174. #extract
  175. tar xf $TMPFOLDER/${LIBEVENTSOURCE##*/} -C $TMPFOLDER >/dev/null 2>&1
  176. if [[ $? > 0 ]]
  177. then
  178.     echo "The command failed, exiting." ; exit
  179. else
  180.     echo " OK!"
  181. fi
  182.  
  183. printf "11/21 Downloading sources of TRANSMISSION"
  184. #Getting sources of Transmission and LibEvent
  185. wget -q -P $TMPFOLDER $TRANSMISSIONSOURCE >/dev/null 2>&1
  186. if [[ $? > 0 ]]
  187. then
  188.     echo "The command failed, exiting." ; exit
  189. fi
  190. #extract
  191. tar xf $TMPFOLDER/${TRANSMISSIONSOURCE##*/} -C $TMPFOLDER >/dev/null 2>&1
  192. if [[ $? > 0 ]]
  193. then
  194.     echo "The command failed, exiting." ; exit
  195. else
  196.     echo " OK!"
  197. fi
  198.  
  199. #clean cache
  200. apt-get clean
  201.  
  202. #Getfilenames of directories
  203. AFTER_SLASH=${LIBEVENTSOURCE##*/}
  204. file="${AFTER_SLASH%%\?*}"
  205. DIRLIBEVENTSOURCE=${file%.tar.xz}
  206. DIRLIBEVENTSOURCE=${DIRLIBEVENTSOURCE%.tar.gz}
  207.  
  208. #Configure LIBEVENT
  209. cd $TMPFOLDER/$DIRLIBEVENTSOURCE
  210. printf "12/21 Configuring LIBEVENT to compile..."
  211. ./configure --prefix=/usr >/dev/null 2>&1
  212. if [[ $? > 0 ]]
  213. then
  214.     echo "The command failed, exiting." ; exit
  215. else
  216.     echo " OK!"
  217. fi
  218.  
  219. #Compile LIBEVENT
  220. printf "13/21 Compiling LIBEVENT..."
  221. make >/dev/null 2>&1
  222. if [[ $? > 0 ]]
  223. then
  224.     echo "The command failed, exiting." ; exit
  225. else
  226.     echo " OK!"
  227. fi
  228.  
  229. #Install LIBEVENT
  230. printf "14/21 Installing LIBEVENT..."
  231. make install >/dev/null 2>&1
  232. if [[ $? > 0 ]]
  233. then
  234.     echo "The command failed, exiting." ; exit
  235. else
  236.     echo " OK!"
  237. fi
  238.  
  239. #Configure TRANSMISSION
  240. AFTER_SLASH=${TRANSMISSIONSOURCE##*/}
  241. file="${AFTER_SLASH%%\?*}"
  242. DIRTRANSMISSION=${file%.tar.xz}
  243. DIRTRANSMISSION=${DIRTRANSMISSION%.tar.gz}
  244.  
  245. cd $TMPFOLDER/$DIRTRANSMISSION
  246. printf "15/21 Configuring TRANSMISSION to compile..."
  247. ./configure --prefix=/usr --enable-lightweight --enable-daemon --enable-utp >/dev/null 2>&1
  248. if [[ $? > 0 ]]
  249. then
  250.     echo "The command failed, exiting." ; exit
  251. else
  252.     echo " OK!"
  253. fi
  254.  
  255. #Compile TRANSMISSION
  256. printf "16/21 Compiling TRANSMISSION..."
  257. make >/dev/null 2>&1
  258. if [[ $? > 0 ]]
  259. then
  260.     echo "The command failed, exiting." ; exit
  261. else
  262.     echo " OK!"
  263. fi
  264.  
  265. #Install TRANSMISSION
  266. printf "17/21 Installing TRANSMISSION..."
  267. #mkdir -p /root/.config/transmissiond
  268. make install >/dev/null 2>&1
  269. if [[ $? > 0 ]]
  270. then
  271.     echo "The command failed, exiting." ; exit
  272. else
  273.     echo " OK!"
  274. fi
  275.  
  276. #settings.json
  277. read -d '' SETTINGSJSON <<"EOF"
  278. {
  279.     "alt-speed-down": 300,
  280.     "alt-speed-enabled": true,
  281.     "alt-speed-time-begin": 420,
  282.     "alt-speed-time-day": 127,
  283.     "alt-speed-time-enabled": true,
  284.     "alt-speed-time-end": 30,
  285.     "alt-speed-up": 10,
  286.     "bind-address-ipv4": "0.0.0.0",
  287.     "bind-address-ipv6": "::",
  288.     "blocklist-enabled": true,
  289.     "blocklist-url": "http://list.iblocklist.com/?list=bt_level1&fileformat=p2p&archiveformat=gz",
  290.     "cache-size-mb": 8,
  291.     "dht-enabled": true,
  292.     "download-dir": "/DataVolume/shares/Public/Torrents/Completed",
  293.     "download-queue-enabled": true,
  294.     "download-queue-size": 5,
  295.     "encryption": 2,
  296.     "idle-seeding-limit": 30,
  297.     "idle-seeding-limit-enabled": true,
  298.     "incomplete-dir": "/DataVolume/shares/Public/Torrents/Incomplete",
  299.     "incomplete-dir-enabled": true,
  300.     "lazy-bitfield-enabled": true,
  301.     "lpd-enabled": false,
  302.     "message-level": 2,
  303.     "peer-congestion-algorithm": "lp",
  304.     "peer-id-ttl-hours": 6,
  305.     "peer-limit-global": 260,
  306.     "peer-limit-per-torrent": 80,
  307.     "peer-port": 51003,
  308.     "peer-port-random-high": 65535,
  309.     "peer-port-random-low": 49152,
  310.     "peer-port-random-on-start": false,
  311.     "peer-socket-tos": "lowcost",
  312.     "pex-enabled": true,
  313.     "port-forwarding-enabled": false,
  314.     "preallocation": 2,
  315.     "prefetch-enabled": 0,
  316.     "queue-stalled-enabled": true,
  317.     "queue-stalled-minutes": 60,
  318.     "ratio-limit": 2,
  319.     "ratio-limit-enabled": true,
  320.     "rename-partial-files": true,
  321.     "rpc-authentication-required": false,
  322.     "rpc-bind-address": "0.0.0.0",
  323.     "rpc-enabled": true,
  324.     "rpc-password": "{ee82e7a5337f8d06704c133d83fd69da54bdc785ixojPp6Z",
  325.     "rpc-port": 9091,
  326.     "rpc-url": "/transmission/",
  327.     "rpc-username": "transmission",
  328.     "rpc-whitelist": "127.0.0.1,192.168.*.*",
  329.     "rpc-whitelist-enabled": true,
  330.     "scrape-paused-torrents-enabled": true,
  331.     "script-torrent-done-enabled": false,
  332.     "script-torrent-done-filename": "",
  333.     "seed-queue-enabled": true,
  334.     "seed-queue-size": 10,
  335.     "speed-limit-down": 1100,
  336.     "speed-limit-down-enabled": true,
  337.     "speed-limit-up": 85,
  338.     "speed-limit-up-enabled": true,
  339.     "start-added-torrents": true,
  340.     "trash-original-torrent-files": true,
  341.     "umask": 0,
  342.     "upload-slots-per-torrent": 8,
  343.     "utp-enabled": true,
  344.     "watch-dir": "",
  345.     "watch-dir-enabled": false
  346. }
  347.  
  348. EOF
  349.  
  350. #INIT.D file
  351. read -d '' INITD <<"EOF"
  352. #! /bin/sh
  353. ### BEGIN INIT INFO
  354. # Provides: transmission-daemon
  355. # Required-Start: networking
  356. # Required-Stop: networking
  357. # Default-Start: 2 3 5
  358. # Default-Stop: 0 1 6
  359. # Short-Description: Start the transmission BitTorrent daemon client.
  360. ### END INIT INFO
  361.  
  362. # Original Author: Lennart A. Jaette, based on Rob Howell's script
  363. # Modified by Maarten Van Coile & others (on IRC)
  364.  
  365. # Do NOT "set -e"
  366.  
  367. #
  368. # ----- CONFIGURATION -----
  369. #
  370. # For the default location Transmission uses, visit:
  371. # http://trac.transmissionbt.com/wiki/ConfigFiles
  372. # For a guide on how set the preferences, visit:
  373. # http://trac.transmissionbt.com/wiki/EditConfigFiles
  374. # For the available environement variables, visit:
  375. # http://trac.transmissionbt.com/wiki/EnvironmentVariables
  376. #
  377. # The name of the user that should run Transmission.
  378. # It's RECOMENDED to run Transmission in it's own user,
  379. # by default, this is set to 'transmission'.
  380. # For the sake of security you shouldn't set a password
  381. # on this user
  382. USERNAME=root
  383.  
  384. # ----- *ADVANCED* CONFIGURATION -----
  385. # Only change these options if you know what you are doing!
  386. #
  387. # The folder where Transmission stores the config & web files.
  388. # ONLY change this you have it at a non-default location
  389. #TRANSMISSION_HOME="/var/config/transmission-daemon"
  390. #TRANSMISSION_WEB_HOME="/usr/share/transmission/web"
  391. #
  392. # The arguments passed on to transmission-daemon.
  393. # ONLY change this you need to, otherwise use the
  394. # settings file as per above.
  395. #TRANSMISSION_ARGS=""
  396.  
  397. # ----- END OF CONFIGURATION -----
  398. #
  399. # PATH should only include /usr/* if it runs after the mountnfs.sh script.
  400. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  401. DESC="bittorrent client"
  402. NAME=transmission-daemon
  403. DAEMON=$(which $NAME)
  404. PIDFILE=/var/run/$NAME.pid
  405. SCRIPTNAME=/etc/init.d/$NAME
  406.  
  407. # Exit if the package is not installed
  408. [ -x "$DAEMON" ] || exit 0
  409.  
  410. # Read configuration variable file if it is present
  411. [ -r /etc/default/$NAME ] && . /etc/default/$NAME
  412.  
  413. # Load the VERBOSE setting and other rcS variables
  414. [ -f /etc/default/rcS ] && . /etc/default/rcS
  415.  
  416. #
  417. # Function that starts the daemon/service
  418. #
  419.  
  420. do_start()
  421. {
  422.     # Export the configuration/web directory, if set
  423.     if [ -n "$TRANSMISSION_HOME" ]; then
  424.           export TRANSMISSION_HOME
  425.     fi
  426.     if [ -n "$TRANSMISSION_WEB_HOME" ]; then
  427.           export TRANSMISSION_WEB_HOME
  428.     fi
  429.  
  430.     # Return
  431. # 0 if daemon has been started
  432. # 1 if daemon was already running
  433. # 2 if daemon could not be started
  434. start-stop-daemon --chuid $USERNAME --start --pidfile $PIDFILE --make-pidfile \
  435.         --exec $DAEMON --background --test -- -f $TRANSMISSION_ARGS > /dev/null \
  436.         || return 1
  437. start-stop-daemon --chuid $USERNAME --start --pidfile $PIDFILE --make-pidfile \
  438.         --exec $DAEMON --background -- -f $TRANSMISSION_ARGS \
  439.         || return 2
  440. }
  441.  
  442. #
  443. # Function that stops the daemon/service
  444. #
  445. do_stop()
  446. {
  447.         # Return
  448.         # 0 if daemon has been stopped
  449.         # 1 if daemon was already stopped
  450.         # 2 if daemon could not be stopped
  451.         # other if a failure occurred
  452.         start-stop-daemon --stop --quiet --retry=TERM/10/KILL/5 --pidfile $PIDFILE --exec $DAEMON
  453.         RETVAL="$?"
  454.         [ "$RETVAL" = 2 ] && return 2
  455.  
  456.         # Wait for children to finish too if this is a daemon that forks
  457.     # and if the daemon is only ever run from this initscript.
  458.     # If the above conditions are not satisfied then add some other code
  459.     # that waits for the process to drop all resources that could be
  460.     # needed by services started subsequently. A last resort is to
  461.     # sleep for some time.
  462.  
  463.     start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
  464.     [ "$?" = 2 ] && return 2
  465.  
  466.     # Many daemons don't delete their pidfiles when they exit.
  467.     rm -f $PIDFILE
  468.  
  469.     return "$RETVAL"
  470. }
  471.  
  472. case "$1" in
  473.   start)
  474.         echo "Starting $DESC" "$NAME..."
  475.         do_start
  476.         case "$?" in
  477.                 0|1) echo " Starting $DESC $NAME succeeded" ;;
  478.                 *) echo " Starting $DESC $NAME failed" ;;
  479.         esac
  480.         ;;
  481.   stop)
  482.         echo "Stopping $DESC $NAME..."
  483.         do_stop
  484.         case "$?" in
  485.                 0|1) echo " Stopping $DESC $NAME succeeded" ;;
  486.                 *) echo " Stopping $DESC $NAME failed" ;;
  487.         esac
  488.         ;;
  489.   restart|force-reload)
  490.         #
  491.         # If the "reload" option is implemented then remove the
  492.         # 'force-reload' alias
  493.         #
  494.         echo "Restarting $DESC $NAME..."
  495.         do_stop
  496.         case "$?" in
  497.           0|1)
  498.                 do_start
  499.                 case "$?" in
  500.                     0|1) echo " Restarting $DESC $NAME succeeded" ;;
  501.                     *) echo " Restarting $DESC $NAME failed: couldn't start $NAME" ;;
  502.                 esac
  503.                 ;;
  504.           *)
  505.                 echo " Restarting $DESC $NAME failed: couldn't stop $NAME" ;;
  506.         esac
  507.         ;;
  508.   *)
  509.         echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
  510.         exit 3
  511.         ;;
  512. esac
  513.  
  514. EOF
  515.  
  516. #Setting TRANSMISSION to auto startup
  517. printf "18/21 Configuring TRANSMISSION to auto startup"
  518. printf "$INITD" > /etc/init.d/transmission-daemon
  519. chmod +x /etc/init.d/transmission-daemon
  520. chown root:root /etc/init.d/transmission-daemon
  521. #Adding autostart to transmission
  522. update-rc.d transmission-daemon defaults >/dev/null 2>&1
  523. if [[ $? > 0 ]]
  524. then
  525.     echo "The command failed, exiting." ; exit
  526. else
  527.     echo " OK!"
  528. fi
  529.  
  530. #Starting TRANSMISSION
  531. printf "19/21 Configuring TRANSMISSION settings.json"
  532. /etc/init.d/transmission-daemon start >/dev/null 2>&1
  533. if [[ $? > 0 ]]
  534. then
  535.     echo "The command failed, exiting." ; exit
  536. fi
  537.  
  538. #Wait transmission to create config files structure
  539. sleep 5
  540.  
  541. /etc/init.d/transmission-daemon stop >/dev/null 2>&1
  542. if [[ $? > 0 ]]
  543. then
  544.     echo "The command failed, exiting." ; exit
  545. fi
  546.  
  547. #configuring SETTINGS.JSON
  548. mkdir -p /root/.config/transmission-daemon
  549. printf "$SETTINGSJSON" > /root/.config/transmission-daemon/settings.json
  550. echo " OK!"
  551.  
  552. printf "20/21 Cleaning temp files"
  553. #Cleaning temp files
  554. cp /etc/apt/sources.list /etc/apt/sources.list.new
  555. cat $TMPFOLDER/sources.list.bak > /etc/apt/sources.list
  556. rm -rf $TMPFOLDER
  557. apt-get clean
  558. echo " OK!"
  559.  
  560. #Starting TRANSMISSION
  561. printf "21/21 Starting TRANSMISSION"
  562. /etc/init.d/transmission-daemon start >/dev/null 2>&1
  563. if [[ $? > 0 ]]
  564. then
  565.     echo "The command failed, exiting." ; exit
  566. else
  567.     echo " OK!"
  568. fi
  569.  
  570. end=$SECONDS
  571. echo "Total time: $((end - start)) secs."
  572. echo "Done!"
  573. echo "Cross your fingers and access http://mybooklive:9091/"
  574. echo "TODO: REMEMBER to configure: settings.json"
  575. echo ""
Add Comment
Please, Sign In to add comment