Calibre OPDS on AsusWRT Merlin with ENTWARE - XIYO/asuswrt-merlin.ng-kr GitHub Wiki

μ†Œκ°œ 및 사전 μš”κ΅¬ 사항

이 νŠœν† λ¦¬μ–Όμ€ Asus RT-AC68Uμ—μ„œ AsusWRT Merlin νŽŒμ›¨μ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°œλ°œλ˜μ—ˆμ§€λ§Œ, μ•½κ°„μ˜ μˆ˜μ •μ„ 톡해 Entware 리포지토리(opkg)λ₯Ό μ‚¬μš©ν•˜λŠ” λͺ¨λ“  λΌμš°ν„°μ— 적용될 수 μžˆμŠ΅λ‹ˆλ‹€. 이 κ°€μ΄λ“œλŠ” λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œμ— λŒ€ν•΄ μ•½κ°„μ˜ κ²½ν—˜μ΄ μžˆλŠ” μ‚¬μš©μžλ₯Ό μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€.

ν•„μš”ν•œ 것: ENTWARE 리포지토리가 ν™œμ„±ν™”λœ λΌμš°ν„°μ™€ Calibre λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μžˆλŠ” ν•˜λ“œ λ“œλΌμ΄λΈŒκ°€ ν•„μš”ν•˜μ§€λ§Œ, 이 νŠœν† λ¦¬μ–Όμ„ 읽고 μžˆλ‹€λ©΄ 이미 κ°–κ³  μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. ν˜„μž¬(2018λ…„ 4μ›”) Optwareμ—λŠ” λ„ˆλ¬΄ 였래된 λ²„μ „μ˜ php 엔진이 μžˆμœΌλ―€λ‘œ, Entware둜 λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ‹œμž‘ν•˜κΈ°

ENTWAREλ₯Ό μ„€μΉ˜ν•˜κ³  μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€. (ASUS WRT Merlin: https://github.com/RMerl/asuswrt-merlin.ng/wiki/Entware , 일반: https://github.com/Entware-ng/Entware-ng/wiki )

opkg update

μ›Ήμ„œλ²„ μ€€λΉ„

이미 μ›Ήμ„œλ²„λ₯Ό 싀행쀑이라면 λͺ¨λ“  νŒ¨ν‚€μ§€κ°€ μžˆλŠ”μ§€ ν™•μΈν•˜μ„Έμš”. λ§Œλ‚  수 μžˆλŠ” 문제의 99%λŠ” λˆ„λ½λœ νŒ¨ν‚€μ§€λ‘œ 인해 λ°œμƒν•©λ‹ˆλ‹€.

μ›Ήμ„œλ²„λ₯Ό μ„€μΉ˜ν•˜κ³ , λ‚˜λŠ” lighttpd, PHP7, 그리고 ν•„μš”ν•œ 기타 νŒ¨ν‚€μ§€λ₯Ό μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€. COPS의 곡식 κ°€μ΄λ“œμ—λŠ” Debian 배포용으둜 μž‘μ„±λ˜μ–΄ "common"에 λ§Žμ€ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν¬ν•¨λ˜μ–΄ μžˆμ–΄μ„œ ν•„μš”ν•œ λͺ¨λ“  νŒ¨ν‚€μ§€κ°€ λ‚˜μ™€μžˆμ§€ μ•ŠμœΌλ―€λ‘œ λͺ‡ κ°€μ§€ "μΆ”κ°€" νŒ¨ν‚€μ§€κ°€ ν•„μš”ν•©λ‹ˆλ‹€. php λ‚΄μž₯ μ›Ήμ„œλ²„( https://github.com/seblucas/cops/wiki/Howto---PhpEmbeddedServer )와도 μž‘λ™ν•΄μ•Ό ν•˜μ§€λ§Œ ν˜„μž¬ opkgλ₯Ό 톡해 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

opkg install php7 php7-fastcgi php7-mod-ctype php7-mod-dom php7-mod-gd php7-mod-intl php7-mod-json php7-mod-mbstring php7-mod-mcrypt php7-mod-pdo php7-mod-pdo-sqlite php7-mod-simplexml php7-mod-sqlite3 php7-mod-xml libxml2 php7-mod-fileinfo lighttpd lighttpd-mod-fastcgi libsqlite3 php7-mod-xmlwriter

(μ•„λ§ˆλ„ opkgλŠ” 이것을 μœ„ν•œ μ’…μ†μ„±μœΌλ‘œ λͺ‡λͺ‡ λ‹€λ₯Έ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•  κ²ƒμž…λ‹ˆλ‹€)

lighttpd ꡬ성 : (좜처: https://github.com/RMerl/asuswrt-merlin.ng/wiki/Lighttpd-web-server-with-PHP-support-through-Entware )

sed -i 's/#server.port                 = 81/server.port                 = 81/g' "/opt/etc/lighttpd/lighttpd.conf"
sed -i "/server.upload-dirs*/cserver.upload-dirs          = ( \"/opt/tmp\" )" "/opt/etc/lighttpd/lighttpd.conf"

(OpenWRT κ²½λ‘œλŠ” 이곳을 μ°Έμ‘°: https://wiki.openwrt.org/doc/howto/http.lighttpd )

그리고 λ§ˆμΉ¨λ‚΄, PHP μž‘λ™μ‹œν‚€κΈ°:

cat >> /opt/etc/lighttpd/conf.d/30-fastcgi.conf  << EOF
server.modules += ( "mod_scgi" )
scgi.server = (
"/RPC2" =>
	( "127.0.0.1" =>
	(
				"socket" => "/opt/var/rpc.socket",
						"check-local" => "disable"
				)
		)
)

server.modules += ( "mod_fastcgi" )
fastcgi.server = (
	".php" =>
		( "localhost" =>
				( "socket" => "/tmp/php-fcgi.sock",
					"bin-path" => "/opt/bin/php-fcgi",
					"max-procs" => 1,
					"bin-environment" =>
							( "PHP_FCGI_CHILDREN" => "1",
								"PHP_FCGI_MAX_REQUESTS" => "100"
						)
			)
	)
)

server.port = 81

EOF

(λ‹€μ‹œ, OpenWRT 및 기타에 λŒ€ν•΄ 경둜λ₯Ό μ‘°μ •) μ„±λŠ₯ λ¬Έμ œκ°€ μžˆλŠ” 경우 PHP_FCGI_MAX_REQUESTS 및 PHP_FCGI_CHILDREN 값을 μ€„μž…λ‹ˆλ‹€.

COPS μ„€μΉ˜

COPSλ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€(1.0.1 버전에 λŒ€ν•œ 예제 μ½”λ“œ):

cd /opt/share/www
wget https://github.com/seblucas/cops/releases/download/1.1.1/cops-1.1.1.zip
mkdir cops
unzip cops-1.0.1.zip -d ./cops

KOBOλ₯Ό μœ„ν•œ URL 리라이트: mod-rewrite μΆ”κ°€(Kobo μ‚¬μš©μžμ—κ²Œ 유용) (좜처: https://github.com/seblucas/cops/wiki/Url-Rewriting-with-COPS ): opkg install lighttpd-mod-rewrite

nano -w /opt/etc/lighttpd/conf.d/99-cops_rewrite.conf

μ΄λ ‡κ²Œ ν•˜μ„Έμš”(단지 ν•œ 쀄 λΏμ΄μ—μš”), λ‚΄ μ„€μΉ˜μ—μ„œλŠ” /opt/var/share/www/cops/에 copsλ₯Ό λ„£μ—ˆμŠ΅λ‹ˆλ‹€(http://router.asus.com:81/cops 둜 이동):

cat >> /opt/etc/lighttpd/conf.d/99-cops_rewrite.conf << EOF
url.rewrite-once = ("/cops/download/(.*)/.*\.(.*)$" => "/cops/fetch.php?data=$1&type=$2", "^/cops/download/(\d+)/(\d+)/.*\.(.*)$" => "/cops/fetch.php?data=$1&db=$2&type=$3")

EOF

COPS μ„€μ •:

nano -w /opt/share/www/cops/config_local.php

$config['calibre_directory']에 calibre db의 μ ˆλŒ€ 경둜λ₯Ό λ„£μŠ΅λ‹ˆλ‹€, 예λ₯Ό λ“€μ–΄:

<?php
$config['calibre_directory'] = '/tmp/mnt/NAS/calibre/BiblioNAS/';
?>

μ‚¬μš© κ°€λŠ₯ν•œ λͺ¨λ“  λ³€μˆ˜λŠ” config_local.php.example 파일과 config_default.php νŒŒμΌμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μˆ˜μ •ν•˜λ €λŠ” λ³€μˆ˜λ₯Ό config_local.php에 μ›ν•˜λŠ” κ°’μœΌλ‘œ μ„€μ •ν•˜μ„Έμš”. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ COPSλ₯Ό 처음 μ—…λ°μ΄νŠΈν•  λ•Œ μˆ˜μ • 사항이 μ†μ‹€λ©λ‹ˆλ‹€!

KOBOλ₯Ό μœ„ν•œ URL 리라이트: Koboλ₯Ό μ‚¬μš©ν•˜μ—¬ 직접 λ‹€μš΄λ‘œλ“œλ₯Ό μ›ν•˜λ©΄ $config['cops_use_url_rewriting']λ₯Ό 1둜 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€(λ‚΄μž₯ λΈŒλΌμš°μ €λ₯Ό μ‚¬μš©ν•˜μ—¬ ebook-readerμ—μ„œ μžλ™ λ‹€μš΄λ‘œλ“œ ν•„μš”), ?> μ•ž 쀄에 λ„£κΈ°

$config['cops_use_url_rewriting'] = "1";

그리고 $config['cops_provide_kepub']λ₯Ό 1둜 μ„€μ •ν•˜μ—¬ μ „μžμ±…μ„ Kepub으둜 μΈμ‹ν•˜κ²Œ ν•˜μ„Έμš”(μž₯별 νŽ˜μ΄μ§•, 톡계 λ“±), λ‹€μ‹œ ?> μ•žμ— μΆ”κ°€

$config['cops_provide_kepub'] = "1";

μ€€λΉ„λ˜μ…¨λ‚˜μš”? μ‹œμž‘ν•˜μ„Έμš”!

μ„œλ²„λ₯Ό μ‹œμž‘ν•©μ‹œλ‹€!

/opt/etc/init.d/S80lighttpd restart

(λ‹€μ‹œ, μ˜ˆμ œλŠ” AsusWRT Merlin을 μœ„ν•œ 것이며, λ‹€λ₯Έ νŽŒμ›¨μ–΄κ°€ μžˆλŠ” 경우 경둜λ₯Ό μˆ˜μ •ν•˜μ„Έμš”)

μ„ νƒν•œ ν¬νŠΈμ—μ„œ λΌμš°ν„° ip둜 μ΄λ™ν•˜μ„Έμš”, 예λ₯Ό λ“€μ–΄; http://router.asus.com:81/cops/checkconfig.php , λͺ¨λ“  ν•­λͺ©μ΄ "OK"둜 ν‘œμ‹œλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ§ˆμ§€λ§‰ κ³ λ € 사항

ν‘œμ€€ μ‚¬μš©(μ ‘κ·Ό, 검색, 읽기 및 λ‹€μš΄λ‘œλ“œ)의 경우 COPSλŠ” Kindleμ—μ„œλ„ μ’‹μŠ΅λ‹ˆλ‹€. Calibreμ—μ„œ μ—΄λ € μžˆλŠ” λ™μ•ˆ μ‚¬μš©μžκ°€ DBμ—μ„œ μž‘μ—…ν•˜μ§€ μ•Šλ„λ‘ μ›Ήμ„œλ²„λ₯Ό μ€‘μ§€ν•˜λŠ” 것을 μžŠμ§€ λ§ˆμ„Έμš”!

  1. lighttpd μ„œλ²„ 쀑지
  2. PCμ—μ„œ NFS(락 μ—†λŠ” μ˜΅μ…˜ μ‚¬μš©) λ˜λŠ” SMBλ₯Ό μ‚¬μš©ν•˜μ—¬ μœ„μΉ˜ 마운트(NFSλ₯Ό μ‚¬μš©ν•  수 μ—†λŠ” 경우, NFSλŠ” 더 λΉ λ₯΄κ³  μ•ˆμ „ν•˜λ©°, 예λ₯Ό λ“€μ–΄, ν•œ IP만 κ³΅μœ μ— μ—°κ²°ν•˜λ„λ‘ ν—ˆμš©ν•˜μ—¬ μ—¬λŸ¬ 개 μ—΄κΈ°λ₯Ό λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€)
  3. Calibre에 라이브러리 μΆ”κ°€
  4. Calibreλ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ—… μˆ˜ν–‰
  5. λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ Calibre μ—°κ²° ν•΄μ œ.
  6. 곡유 ν•΄μ œ.
  7. lighttpd μ‹€ν–‰.

λΌμš°ν„°, LAN 등을 느리게 λ§Œλ“€κΉŒμš”?

κ°€λŠ₯ν•©λ‹ˆλ‹€. ν•˜λ“œμ›¨μ–΄, 라이브러리의 무게, λ™μ‹œμ— 접속할 μ‚¬μš©μž 수 등에 따라 λ‹¬λΌμ§‘λ‹ˆλ‹€. λ‚˜μ˜ RT-AC68Uμ—μ„œλŠ” μ–΄λ–€ λ¬Έμ œλ„ λ°œκ²¬ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄ λͺ©ν‘œλŠ” PCλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  Kindleμ—μ„œ 직접 μ „μžμ±…μ„ μ‘°νšŒν•˜κ³  λ‹€μš΄λ‘œλ“œν•˜λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό λ‹¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€. μ „μžμ±…μ˜ κ³ κΈ‰ 관리λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ λ§Œλ“€ λ•Œμ—λŠ” NFSμ—μ„œ Calibreλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

COPSμ—μ„œ 썸넀일 생성 및 μ²˜λ¦¬μ— κ΄€ν•œ 것을 ꡬ성할 ν•„μš”κ°€ μžˆλ‹€λ©΄ μ„±λŠ₯, λͺ©λ‘ 등을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ cops/config_local.phpμ—μ„œ 이 쀄듀을 μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이것이 λ‚˜μ˜ 것이고, μ•½κ°„μ˜ CPUκ°€ κ³΅κ²©μ μ΄μ§€λ§Œ... λ‹Ήμ‹ μ˜ ν•„μš”μ— 따라 κ΅¬μ„±ν•˜μ„Έμš”!

/* * λ‹€μš΄λ‘œλ“œ 전에 Epub 메타데이터 μ—…λ°μ΄νŠΈ * 1 : 예 (ν™œμ„±ν™”) * 0 : μ•„λ‹ˆμ˜€ */ $config['cops_update_epub-metadata'] = "1";

			/*
				* 썸넀일은 μ‹€μ‹œκ°„μœΌλ‘œ μƒμ„±λ˜λ―€λ‘œ 느린 CPUλ₯Ό κ°€μ§„ μ„œλ²„μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€ (Raspberry Pi, Dockstar, Piratebox, ...).
				* 이 ꡬ성 ν•­λͺ©μ„ μ‚¬μš©ν•˜λ©΄ 썸넀일이 μ–΄λ–»κ²Œ 생성될지 μ‚¬μš©μž μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€
				* "" : 썸넀일 생성 (CPU μ‚¬μš©λŸ‰ λ†’μŒ)
				* "1" : 항상 전체 크기 이미지 전솑 (λ„€νŠΈμ›Œν¬ μ‚¬μš©λŸ‰ λ†’μŒ)
				* μ–΄λ–€ url : μΈλ„€μΌλ‘œ μƒμˆ˜ 이미지 전솑 (예: "images/bookcover.png" μ‹œλ„)
				*/
			$config['cops_thumbnail_handling'] = "1";

			/*
				* λ¦¬μ‚¬μ΄μ¦ˆλœ 썸넀일을 μœ μ§€ν•  디렉토리: 첫 μ ‘κ·Όμ‹œμ—λ§Œ 썸넀일을 λ¦¬μ‚¬μ΄μ¦ˆν•œ ν›„ 이 μΊμ‹œλ₯Ό μ‚¬μš©ν•˜λ„λ‘ ν—ˆμš©.
				* $config['cops_thumbnail_handling']은 ""이어야 ν•©λ‹ˆλ‹€.
				* "" : 썸넀일 μΊμ‹œν•˜μ§€ μ•ŠμŒ
				* "/tmp/cache/" (예) : /tmp/cache/에 썸넀일 생성
				* 주의 : /둜 λλ‚˜μ•Ό ν•©λ‹ˆλ‹€.
				*/
			$config['cops_thumbnail_cache

_directory'] = ""; /* * νŽ˜μ΄μ§€ λ‹Ή μ΅œλŒ€ ν•­λͺ© 수 * -1 λ¬΄μ œν•œ */ $config['cops_max_item_per_page'] = "-1";

			/*
				* ν‘œμ‹œν•  졜근 μ±…μ˜ 수
				*/
			$config['cops_recentbooks_limit'] = '50';

μ›Ήμ„œλ²„μ—μ„œ max contemporray access 및 call μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€( lighttpd man νŽ˜μ΄μ§€ μ°Έμ‘°), 예λ₯Ό λ“€μ–΄, /opt/etc/lighttpd/conf.d/30-fastcgi.confμ—μ„œ PHP_FCGI_MAX_REQUESTS 값을 μ€„μž…λ‹ˆλ‹€.