Vous êtes ici : Accueil / Debian GNU/Linux / Applications Web / Divers / Installer Calibre OPDS PHP Server (COPS) sur Debian

Installer Calibre OPDS PHP Server (COPS) sur Debian

Par Pierre-Yves Landuré Dernière modification 25/10/2017 10:11

COPS est une application Web permettant la publication d'une bibliothèque d'e-books Calibre au format OPDS (format de catalogue Open Publication Distribution System). Il permet d'accéder facilement aux e-books d'une bibliothèque Calibre depuis une liseuse supportant le format OPDS.

Ce guide est testé sur:

  • Debian 7.0 wheezy
  • Debian 8.0 Jessie

Ce guide est testé avec ces versions de COPS:

  • 1.0.0

Prérequis

Ce guide nécessite :

Ce guide recommande l'un des outils suivant:

Paramètres

Renseignez le nom de domaine où sera disponible l'application:

domain='opds.domain.com'

Renseignez le nom d'utilisateur pour protéger l'accès à l'application par un login:

# userName="user"

Renseignez le nom du certificat SSL à utiliser pour chiffrer l'application avec HTTPS (créé via la procédure Créer un certificat SSL / TLS sur Debian ou via Let's Encrypt) (optionnel, recommandé):

sslKeyName="auto"

Renseignez le chemin de la bibliothèque Calibre (synchronisée par Dropbox, Seafile ou WebDAV par exemple):

calibrePath="/var/lib/cops/${domain}/Calibre"

Renseignez la zone horaire du site (voir http://www.php.net/manual/en/timezones.php):

timeZone="$(command cat '/etc/timezone')"

Paramètres optionnels

Renseignez le nom du propriétaire de la bibliothèque:

authorName="Firstname Lastname"

Renseignez l'URL du site du propriétaire:

authorUrl="http://${domain}/"

Renseignez l'email du propriétaire:

authorEmail="email@domain.com"

Installation

Détectez le proxy de commande (command ou sudo):

cmdProxy='command'
command type -f 'sudo' >'/dev/null' && cmdProxy='sudo'

Déterminez le chemin d'installation:

installPath="/opt/cops/${domain}"

Détectez le nom des paquets PHP disponibles:

phpVersion='5'
if [ -n "$(command apt-cache pkgnames php-cli)" ]; then
phpVersion=''
fi

Nettoyez le chemin de la bibliothèque Calibre (suppression du '/' de fin):

calibrePath="$(echo "${calibrePath}" | sed -e 's|/$||g')"

Détectez le protocole utilisé:

protocol="http"
[[ -n "${sslKeyName}" && ( -e "/etc/ssl/private/${sslKeyName}.key" || "${sslKeyName}" = 'auto' ) ]] && protocol="https"

Assurez-vous que le dossier parent existe:

${cmdProxy} mkdir --parent "$(command dirname "${installPath}")"

Préparation de l'environnement

Installez les logiciels nécessaires:

${cmdProxy} apt-get install php${phpVersion}-gd php${phpVersion}-sqlite git apg libapache2-mod-xsendfile unzip

Activez les modules xsendfile, expires et rewrite:

${cmdProxy} a2enmod xsendfile expires rewrite

Rechargez la configuration de PHP et Apache 2:

${cmdProxy} php-tools --reload
${cmdProxy} service apache2 force-reload

Mise en place de l'application

Récupérez la dernière version stable du logiciel:

command wget 'https://raw.github.com/biapy/howto.biapy.com/master/various/sf-downloader' \
--quiet --no-check-certificate --output-document='/tmp/sf-downloader'
command chmod +x '/tmp/sf-downloader'
source="$(${cmdProxy} /tmp/sf-downloader \
    --output-directory="${installPath}" \
--generic='https://github.com/seblucas/cops/releases' \
    --zip 'cops' 'cops-VERSION.zip')"

Configuration de l'application

Créez le fichier de configuration:

${cmdProxy} cp "${installPath}/config_local.php.example" "${installPath}/config_local.php"

Configurez le chemin de la bibliothèque Calibre:

${cmdProxy} sed -i \
    -e "s|calibre_directory.*|calibre_directory'] = '${calibrePath}/';|" \
  "${installPath}/config_local.php"

Configurez l'URL de l'application:

${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['calibre_internal_directory'] = '${protocol}://${domain}/';"

Activez la réécriture d'URL:

${cmdProxy} sed -i \
    -e "s|cops_use_url_rewriting.*|cops_use_url_rewriting'] = '1';|" \
  "${installPath}/config_local.php"
${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['cops_provide_kepub'] = '1';"

Activez l'utilisation de X-SendFile:

${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['cops_x_accel_redirect'] = 'X-Sendfile';"

Activez la mise à jour des metadata des Epub avant téléchargement:

${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['cops_update_epub-metadata'] = '1';"

Configurez la fonctionnalité "Send to Kindle / Email":

${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['cops_update_epub-metadata'] = array(
'smtp.host' => 'localhost',
'smtp.username' => '',
'smtp.password' => '',
'smtp.secure' => '',
'smtp.from' => '${authorEmail}'
);"

Améliorez les résultats de recherche:

${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['cops_normalized_search'] = '1';"

Configurez le propriétaire de la bibliothèque OPDS:

${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['cops_author_name'] = '${authorName}';
  \$config['cops_author_uri'] = '${authorUrl}';
 \$config['cops_author_email'] = '${authorEmail}';
"

Sécurisation de l'accès

Générez un mot de passe aléatoire:

userPassword="$(command apg -q -a 0 -n 1 -M NCL)"

Créez le fichier htpasswd:

[[ -n "${userName}" ]] && ${cmdProxy} htpasswd -cbm "${installPath}/.htpasswd" "${userName}" "${userPassword}"

Générez la configuration Apache adéquate:

authConf=""
if [[ -n "${userName}" ]]; then
authConf=" <FilesMatch \"\\.php\$\">
  AuthUserFile \"${installPath}/.htpasswd\"
  AuthName \"${domain}\"
  AuthType Basic
  Require valid-user
</FilesMatch>"
fi

Cette configuration sera ajoutée par a2tools au fichier VirtualHost généré.

Mise à jour automatique

Installez sf-downloader sur le système:

command wget 'https://raw.github.com/biapy/howto.biapy.com/master/various/sf-downloader' \
--quiet --no-check-certificate --output-document='/usr/local/bin/sf-downloader'
command chmod +x '/usr/local/bin/sf-downloader'

Mettez en place un script de mise à jour automatique quotidienne du code de l'outil:

${cmdProxy} tee "/etc/cron.daily/cops-${domain//./-}-update" <<< "#"'!'"/bin/bash
# Update ${domain} source code from Git.
test -x '/usr/local/bin/sf-downloader' -a -d '${installPath}' && {
newestVersion=\"\$(sf-downloader \\
--generic='https://github.com/seblucas/cops/releases' \\
    --version 'cops' 'cops-VERSION.zip')\"
currentVersion=\"\$(grep 'define.*VERSION' '${installPath}/base.php' \\
| sed -e \"s/^.*'\\([0-9\\.]*\\)'.*\$/\\1/\")\"

if [[ \"\${newestVersion}\" != \"\${currentVersion}\" ]]; then
echo \"Udating COPS on ${domain} from version \${currentVersion} to \${newestVersion}.\"
source=\"\$(sf-downloader \\
     --output-directory='${installPath}' \\
--generic='https://github.com/seblucas/cops/releases' \\
    --zip 'cops' 'cops-VERSION.zip')\"
fi
}"
command chmod +x "/etc/cron.daily/cops-${domain//./-}-update"

Mise en place de l'hôte virtuel

Créez la configuration du serveur HTTP pour le domaine:

if [[ -n "${sslKeyName}" && ( -e "/etc/ssl/private/${sslKeyName}.key" || "${sslKeyName}" = 'auto' ) ]]; then
  ${cmdProxy} a2tools --ssl="${sslKeyName}" --custom-options="${authConf}" --overrides='All' "${domain}" "${installPath}"
else
${cmdProxy} a2tools --custom-options="${authConf}" --overrides='All' "${domain}" "${installPath}"
fi

L'installation est maintenant disponible sur le domaine.

Utilisez la commande suivante pour obtenir les informations de connexion au site:

echo "URL: ${protocol}://${domain}/
OPDS feed: ${protocol}://${domain}/feed.php
Username: ${userName}
Password: ${userPassword}"

Sauvegardes

Sauvegardez l'installation avec Backup Manager (voir Installer et configurer Backup Manager sur Debian):

${cmdProxy} backup-manager-tools add "${installPath}"

Remerciements