From afd774cc9fd5ee138ed157adc881bcc8ab92638f Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Mon, 13 Apr 2015 14:46:17 -0400 Subject: [PATCH] calibre-portable.sh: misc fixes. - Fix temp dir. - Migrate settings to configuration file. - Use trap to exit and cleanup. umask was doing absolutely nothing. Fixes #1426222 [Updated version of calibre-portable.sh](https://bugs.launchpad.net/calibre/+bug/1426222) --- resources/calibre-portable.sh | 315 +++++++++++++++++++++++----------- 1 file changed, 215 insertions(+), 100 deletions(-) mode change 100644 => 100755 resources/calibre-portable.sh diff --git a/resources/calibre-portable.sh b/resources/calibre-portable.sh old mode 100644 new mode 100755 index 5cc4605ee0..46f4311169 --- a/resources/calibre-portable.sh +++ b/resources/calibre-portable.sh @@ -13,11 +13,11 @@ # By setting the paths correctly it can be used to run: # - A "portable calibre" off a USB stick. # - A network installation with local metadata database -# (for performance) and books stored on a network share +# (for performance) and books stored on a network share # - A local installation using customised settings # # If trying to run off a USB stick then the folder structure -# shown below is recommended (relative to the location of +# shown below is recommended (relative to the location of # this script file). This structure can also be used when # running of a local hard disk if you want to get the level # of control this script file provides. @@ -28,7 +28,7 @@ # # This script file is designed so that if you create the recommended # folder structure then it can be used 'as is' without modification. -# To use your own structure, simply set the variables at the head of each block. +# To use your own structure, simply set the variables in the generated configuration file. # # More information on the Environment Variables used by Calibre can # be found at: @@ -48,17 +48,33 @@ # # 02 Feb 2015 eschwartz -- Fix path issues, allow setting each location in one variable, allow # specifying a list of libraries in descending order of priority. +# +# 01 Apr 2015 eschwartz -- Fix temp dir and permissions, migrate settings to configuration file. # ----------------------------------------------------- -# Make all new files get created read-writable by world -# by default. This allows you to use calibre on other -# computers without changing fstab rules and suchlike. -# -# You can now use an ext3 drive instead of vfat and the +# On exit, make sure all files are marked world-writable. +# This allows you to use calibre on other computers +# without changing fstab rules and suchlike. +# You can now use an ext3 drive instead of vfat so the # binaries and script will be executable. # ----------------------------------------------------- -umask 000 +cleanup() { + # Check if user has disabled cleanup + if [[ "${CALIBRE_NO_CLEANUP}" = "1" ]]; then + return + fi + + for i in "${CONFIG_DIR}" "${CALIBRE_LIBRARY_DIRECTORY}" \ + "${METADATA_DIR}" "${SRC_DIR}" "${BIN_DIR}"; do + if [[ -d "${i}" ]]; then + chmod a+rwX "${i}" + fi + done + rm -rf "${CALIBRE_TEMP_DIR}" +} + +trap cleanup EXIT # ------------------------------------------------ # Interactive options. @@ -102,12 +118,162 @@ while [[ "${#}" -gt 0 ]]; do done # ------------------------------------------------ -# Set up Calibre Config folder -# -# This is where user specific settings are stored. +# Create or read configuration file. # ------------------------------------------------ -CONFIG_DIR="$(pwd)/CalibreConfig" +if [[ -f "$(pwd)/calibre-portable.conf" ]]; then + source "$(pwd)/calibre-portable.conf" +else + cat <<- _EOF_ > $(pwd)/calibre-portable.conf + # Configuration file for calibre-portable. Generated on $(date) + # Settings in here will override the defaults specified in the portable launcher. + + ################################################## + # Set up calibre config folder. + # + # This is where user specific settings are stored. + ################################################## + + # CONFIG_DIR="\$(pwd)/CalibreConfig" + + ################################################################ + # -- Specify the location of your calibre library. + # + # -- Either set an explicit path, or if running from a USB stick + # -- a relative path can be used to avoid needing to know the + # -- mount point of the USB stick. + # + # -- Specify a list of libraries here, by adding new elements to the + # -- array. The first value of LIBRARY_DIRS that is an existing directory + # -- will be used as the current calibre library. + ################################################################ + + # LIBRARY_DIRS[0]="/path/to/first/CalibreLibrary" + # LIBRARY_DIRS[1]="/path/to/second/CalibreLibrary" + # LIBRARY_DIRS[2]="\$(pwd)/CalibreLibrary" + + ################################################################ + # -- Specify location of metadata database (optional). + # + # -- Location where the metadata.db file is located. If not set + # -- then the same location as the library folder will be assumed. + # -- This option is typically used to get better performance when the + # -- library is on a (slow) network drive. Putting the metadata.db + # -- file locally then makes gives a big performance improvement. + # + # -- NOTE. If you use this option, then the ability to switch + # -- libraries within calibre will be disabled. Therefore + # -- you do not want to set it if the metadata.db file + # -- is at the same location as the book files. + # + # -- Another point to watch is that plugins can cause problems + # -- as they often store absolute path information. + ################################################################ + + # METADATA_DIR="\$(pwd)/CalibreMetadata" + + ################################################################ + # -- Specify location of source (optional). + # + # -- It is easy to run calibre from source. Just set the environment + # -- variable to where the source is located. When running from source + # -- the GUI will have a '*' after the version number that is displayed + # -- at the bottom of the calibre main screen. + # + # -- More information on setting up a development environment can + # -- be found at: + # -- http://manual.calibre-ebook.com/develop.html#develop + ################################################################ + + # SRC_DIR="$\(pwd)/CalibreSource/src" + + ################################################################ + # -- Specify location of calibre linux binaries (optional). + # + # -- To avoid needing Calibre to be set in the search path, ensure + # -- that if Calibre Program Files exists, we manually specify the + # -- location of the binary. + # -- The following test falls back to using the search path, or you + # -- can specifically use the search path by leaving the BIN_DIR blank. + # + # -- This folder can be populated by copying the /opt/calibre folder + # -- from an existing installation or by installing direct to here. + # + # -- NOTE. Do not try and put both Windows and Linux binaries into + # -- the same folder as this can cause problems. + ################################################################ + + # BIN_DIR="$\(pwd)/calibre" + + ################################################################ + # -- Location of calibre temporary files (optional). + # + # -- calibre creates a lot of temporary files while running + # -- In theory these are removed when calibre finishes, but + # -- in practice files can be left behind (particularly if + # -- a crash occurs). Using this option allows some + # -- explicit clean-up of these files. + # -- If not set calibre uses the normal system TEMP location + ################################################################ + + # CALIBRE_TEMP_DIR="/tmp/CALIBRE_TEMP_\$(tr -dc 'A-Za-z0-9'