{"id":74,"date":"2024-02-04T16:46:24","date_gmt":"2024-02-04T07:46:24","guid":{"rendered":"https:\/\/blog.gerd.kr\/?p=74"},"modified":"2024-04-07T09:51:10","modified_gmt":"2024-04-07T00:51:10","slug":"truenas-%ec%97%90-calibre-web-%ec%84%a4%ec%b9%98","status":"publish","type":"post","link":"https:\/\/blog.gerd.kr\/?p=74","title":{"rendered":"TrueNAS \uc5d0 Calibre-Web \uc124\uce58"},"content":{"rendered":"\n<p>TreuNAS \uc5d0\uc11c\ub294 Calibre-Web \uc744 \ucee4\ubba4\ub2c8\ud2f0 \ud50c\ub7ec\uadf8\uc778\uc73c\ub85c \uc81c\uacf5\ud558\ub294\ub370, \uc9c0\uae08 \ub0b4\uac00 \uc0ac\uc6a9\ud558\uace0 \uc788\ub294 \ubc84\uc83c\uc5d0\uc11c\ub294 \uc124\uce58\uac00 \ub418\uc9c8 \uc54a\uc558\ub2e4. \ubb50\ub77c\ubb50\ub77c \ud558\ub294\ub370 \uc2e0\uacbd\uc4f0\uae30 \uadc0\ucc2e\uc544\uc11c \uadf8\ub0e5 \uc218\ub3d9\uc73c\ub85c \uc124\uce58\ud588\ub2e4. \uc5b4\ucc28\ud53c \ud50c\ub7ec\uadf8\uc778\uc73c\ub85c \uc124\uce58\ud574\ub3c4 rc.d \uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc57c\ub9ac\uaf2c\ub9ac\ud574\uc11c \ub530\ub85c \uc190\uc744 \ub300\uc57c \ud55c\ub2e4. \uc774\uc655 \uc774\ub807\uac8c \ub41c \uac70 \ud558\ub098\ud558\ub098 \uc815\ub9ac\ud574\ubcf4\ub824\uace0 \ud55c\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Calibre-Web \uc740 \ubb54\uac00?<\/h4>\n\n\n\n<p> \uc774\ub984\uc5d0\uc11c \uc9d0\uc791\ud560 \uc218 \uc788\ub4ef\uc774 Calibre ( \uce98\ub9ac\ubc84 \ub77c\uace0 \uc77d\ub354\ub77c&#8230; ) \ub77c\ub294, \ub9ac\ub205\uc2a4\uc5d0\uc11c\ub294 \uc720\uad6c\ud55c \uc5ed\uc0ac\uc640 \uc804\ud1b5\uc744 \uac00\uc9c4 \ub3c4\uc11c \uad00\ub9ac \uc571\uc744 Python \uc744 \uc774\uc6a9\ud558\uc5ec Web \uc5d0\uc11c \uc774\uc6a9\ud560 \uc218 \uc788\uac8c \ud3ec\ud305\ud55c \uac83\uc774 Calibre-Web \uc774\ub2e4. \uc77c\ubc18\uc801\uc778 \ub3c4\uc11c\ub97c \uad00\ub9ac\ud558\ub294 \ub370\uc5d0\ub294 \ub354 \uc774\uc0c1\uc774 \uc5c6\ub2e4 \uc2f6\uc744 \uc815\ub3c4\uc9c0\ub9cc, \uc81c\uc791\uc790\uac00 \uc758\ub3c4\ud55c \ub8e8\ud2f4\uc5d0\uc11c \uc870\uae08\uc774\ub77c\ub3c4 \ubc97\uc5b4\ub098\uba74 \uc5c4\uccad\ub09c \ub178\uac00\ub2e4\uac00 \uae30\ub2e4\ub9ac\uace0 \uc788\ub2e4. \uac00\uc7a5 \uc88b\uc740 \uc608\uac00 \ub9cc\ud654\ucc45.  Calibre \uc5d0\uc11c \ub9cc\ud654\ucc45\uc740 \uc5f4\ub78c\ub3c4 \uad00\ub9ac\ub3c4 \ub2e4\ub978 \ub300\ubd80\ubd84\uc758 \ub9cc\ud654\ucc45 \uad00\ub9ac \uc571\uacfc\ub294 \uc870\uae08 \uada4\ub3c4\uac00 \ub2e4\ub974\ub2e4. \uadf8\ub9ac\uace0 \uadf8\uac78 \uc544\uc8fc \ucda9\uc2e4\ud558\uac8c \uace0\ub300\ub85c \uad6c\ud604\ud574\ub193\uc73c\uba74\uc11c \uc911\ubcf5\uccb4\ud06c\ub098 \ud30c\uc2f1 \ub4f1\uc758 \uc77c\ubd80 \uae30\ub2a5\uc740 \uc544\uc9c1 \ucd94\uac00\ub418\uc9c0 \uc54a\uc788\ub2e4.<\/p>\n\n\n\n<p>\uadf8\ub7f0 \uc774\uc720\ub85c Calibre-Web \ub9cc\uc73c\ub85c\ub294 \uc11c\uc801, \ud2b9\ud788 \ub9cc\ud654\ucc45\uc744 \uad00\ub9ac\ud558\uae30\uac00 \uc0c1\ub2f9\ud788 \ud798\ub4e4\ub2e4. \ucc98\uc74c \uc124\uce58 \ud560 \ub54c\ub3c4 \uadf8\ub807\uace0 \ubb34\uc870\uac74 \ub85c\uceec\uc5d0 Calibre \ub97c \uc124\uce58\ud558\uc5ec \uc791\uc5c5\ud560 \uc218 \uc788\ub294 \ud658\uacbd\uc774 \uac16\ucdb0\uc838 \uc788\uc5b4\uc57c \ud55c\ub2e4. \uc774\uac78 \uc774\ud574 \ubabb\ud574\uc11c \uc5d0\uc5b4\ucf54\ubbf9\uc2a4 \ub4f1\uc73c\ub85c \ub208\uc744 \ub3cc\ub824 \ubd24\uc9c0\ub9cc, \ub0b4\uac00 \uc4f0\ub294 \ud658\uacbd\uc5d0\uc11c\ub294 Calibre-Web \uc774 \uadf8\ub098\ub9c8 \ub9de\ucd94\uae30 \ud3b8\ud588\ub2e4.<\/p>\n\n\n\n<p>\uc774\ub7ec\ub2c8 \uc800\ub7ec\ub2c8 \ud574\ub3c4 \uc9c0\uae08 \uc798 \uc4f0\uace0 \uc788\ub2e4. \uc544\uc9c1 \ub9c9\ub178\ub3d9(?)\uc744 \ub354 \ud574\uc57c \ud558\uae34 \ud558\uc9c0\ub9cc&#8230;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\uc791\uc5c5 \uc21c\uc11c<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Jail \uc744 \ub9cc\ub4e0\ub2e4<\/li>\n\n\n\n<li>\uc720\uc838 \uc0dd\uc131<\/li>\n\n\n\n<li>\uc800\uc7a5\uc18c \uc124\uc815<\/li>\n\n\n\n<li>Calibre-Web \uc124\uce58<\/li>\n\n\n\n<li>metadata.db \ud30c\uc77c\uc744 \ubcf5\uc0ac <\/li>\n\n\n\n<li>\uc2dc\uc791 \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc131<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Jail \uc0dd\uc131<\/h4>\n\n\n\n<p>Jail \uc744 \uc0dd\uc131\ud55c\ub2e4. \ub2e4\ub978 \uac70 \ub9cc\ub4e4 \ub54c \ucc98\ub7fc, Base, \ucd5c\uc2e0 \ubc84\uc83c, DHCP, VNET \uc73c\ub85c \uc124\uc815\ud55c\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\uc720\uc838 \uc0dd\uc131<\/h4>\n\n\n\n<p>root \uacc4\uc815\uc5d0 \uc124\uce58\ud574\uc11c \uc6b4\uc6a9\ud574\ub3c4 \ubcc4 \ubb38\uc81c\ub294 \uc5c6\ub2e4\uace0 \uc0dd\uac01\ud558\uc9c0\ub9cc, \ubcf4\uc548 \uce21\uba74\uc5d0\uc120 \ubcc4\ub85c \uc88b\uc740 \uc120\ud0dd\uc740 \uc544\ub2c8\ub2e4. \uadf8\ub7ec\ub2c8 \uc801\ub2f9\ud55c \uacc4\uc815\uc744 \uc0dd\uc131\ud55c\ub2e4. \uc8fc\uc758\ud574\uc57c \ud560 \uc810\uc740, \uc720\uc838 \uacc4\uc815\uc73c\ub85c \uc11c\ube44\uc2a4\ub97c \uc6b4\uc601\ud558\uba74 Well-Known Port \ub294 \ud560\ub2f9\ud560 \uc218 \uc5c6\ub2e4. \ub300\ucda9 1000\ubc88\ub300 \uc774\ud558\ub2e4. \uadf8\ub7ec\ub2c8 \uadf8\ub0e5 \uae30\ubcf8 \ud3ec\ud2b8 ( 8083 ) \ub85c \uc6b4\uc601\ud558\uc790. \uc5ec\uae30\uc11c\ub294 &#8216;caluser&#8217; \ub77c\ub294 \uacc4\uc815\uc73c\ub85c \uc11c\ube44\uc2a4\ub97c \uc6b4\uc6a9\ud55c\ub2e4\uace0 \uac00\uc815\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>shell &gt; adduser \nUsername: caluser\n...\nUsername   : caluser\nPassword   : ****\nFull Name  : calibre user\nUid        : 1001\nClass      :\nGroups     : \/caluser\nHome       : \/home\/caluser\nHome Mode  : \nShell      : \/bin\/sh\nLocaked    : no\nOK?   (yes\/no): yes\n...\nAdd another user? (yes\/no): no\nGoodbye!\nshell &gt; <\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\uc800\uc7a5\uc18c \uc124\uc815<\/h4>\n\n\n\n<p>Calibre-Web \uc758 \uc800\uc7a5\uc18c\ub97c \uc124\uc815\ud55c\ub2e4. \ub530\ub85c \ucd94\uac00\ud558\uc9c0 \uc54a\uace0 \uadf8\ub0e5 Jail \uc5d0 \uc800\uc7a5\ud558\ub294 \ubc29\ubc95\ub3c4 \uc788\uc9c0\ub9cc, \ub098\ub294 TrueNAS \uc5d0\uc11c \uc81c\uacf5\ud558\ub294 FTP, SMB \ub97c \uc0ac\uc6a9\ud560 \uc608\uc815\uc774\ub77c Dataset \uc744 \ub530\ub85c \uc0dd\uc131\ud574\uc11c \uc801\ub2f9\ud55c \uacbd\ub85c\uc5d0 \ubd99\uc5ec\uc8fc\uc5c8\ub2e4. <\/p>\n\n\n\n<p>\ub9c8\uc6b4\ud2b8 \ud560 \ud3f4\ub354\ub97c \uc801\ub2f9\ud55c \uacbd\ub85c\uc5d0 \uc0dd\uc131\ud558\uace0 caluser \uc5d0\uac8c \uc18c\uc720\uad8c\uc744 \ub118\uae34\ub2e4. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>shell &gt; cd \/mnt\nshell &gt; mkdir calibredata\nshell &gt; chown caluser:caluser .\/calibredata\nshell &gt;<\/code><\/pre>\n\n\n\n<p>Jail \uc744 \uc885\ub8cc\ud558\uace0, TrueNAS \uc758 Menu -&gt; Storage -&gt; Pools \ub97c \ud074\ub9ad\ud55c\ub2e4. \uc801\ub2f9\ud55c \uacbd\ub85c\uc5d0 Dataset \uc744 \uc0dd\uc131\ud55c\ub2e4. \ubd80\ubaa8\uac00 \ub420 Dataset \uc758 \uac00\uc7a5 \uc624\ub978\ucabd\uc758, \uc138\ub85c\ub85c \uc810 \uc138\uac1c \uc788\ub294 \uac78 \ud074\ub9ad\ud558\uba74 \ub098\uc624\ub294 \ud31d\uc5c5\uba54\ub274\uc5d0\uc11c Add Dataset \uc744 \ud074\ub9ad\ud558\uba74 \uc0dd\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d2b89831297&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d2b89831297\" class=\"wp-block-image aligncenter size-full is-resized wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1178\" height=\"667\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/01\/\ucea1\ucc982.png\" alt=\"\" class=\"wp-image-78\" style=\"width:400px\" srcset=\"https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/01\/\ucea1\ucc982.png 1178w, https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/01\/\ucea1\ucc982-300x170.png 300w, https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/01\/\ucea1\ucc982-1024x580.png 1024w, https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/01\/\ucea1\ucc982-768x435.png 768w\" sizes=\"auto, (max-width: 1178px) 100vw, 1178px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"\ud655\ub300\ud558\uae30\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p>\uc774 \ud3f4\ub354\ub97c Jail \uc5d0 \ub9c8\uc6b4\ud2b8\uc2dc\ud0a8\ub2e4. Jail \uc744 \uc815\uc9c0\ud558\uace0 Mounts Points \ub97c \ud074\ub9ad\ud55c\ub2e4. Actions \uc744 \ud074\ub9ad\ud558\uba74 \ub098\uc624\ub294 \ud31d\uc5c5\uba54\ub274\uc5d0\uc11c Add \ub97c \ud074\ub9ad\ud558\uba74 \uc124\uc815\ud654\uba74\uc73c\ub85c \uc774\ub3d9\ud55c\ub2e4. Source \uac00 Dataset \uc774\uace0, Destination \uc774 Jail \uc5d0 \ub9cc\ub4e0 \ud3f4\ub354\ub2e4. <\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d2b89831909&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d2b89831909\" class=\"wp-block-image aligncenter size-full is-resized wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"963\" height=\"252\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/01\/\ucea1\ucc983.png\" alt=\"\" class=\"wp-image-79\" style=\"width:400px\" srcset=\"https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/01\/\ucea1\ucc983.png 963w, https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/01\/\ucea1\ucc983-300x79.png 300w, https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/01\/\ucea1\ucc983-768x201.png 768w\" sizes=\"auto, (max-width: 963px) 100vw, 963px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"\ud655\ub300\ud558\uae30\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p>\ub300\ucda9 \uc774\ub7f0 \uc2dd\uc73c\ub85c \ub098\uc624\uba74 \ub41c\ub2e4. \ub9c8\uc6b4\ud2b8 \ud558\uace0 \ub098\uc11c \uad8c\ud55c \ubc14\uafb8\ub824\uba74 \uc548 \ubc14\ub00c\ub2c8\uae4c, Jail \uc758 shell \uc5d0\uc11c \uad8c\ud55c \uc124\uc815\uc744 \ub2e4 \ud558\uace0 \ub9c8\uc6b4\ud2b8\ub97c \uc2dc\ucf1c\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Calibre-Web \uc124\uce58<\/h4>\n\n\n\n<p>\uac00\uc7a5 \uc911\uc694\ud55c \ud328\ud0a4\uc9c0\ub294 \ud30c\uc774\uc36c\uc774\ub2e4. \uc544\ub9c8 \ud30c\uc774\uc36c \ud328\ud0a4\uc9c0 \uc124\uce58\ud558\uba74\uc11c \uc790\ub3d9\uc73c\ub85c \uc124\uce58\ub418\uaca0\uc9c0\ub9cc, ZIP, RAR \ub4f1\uc758 \uc555\ucd95 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc640 ImageMagic7 \uac19\uc740 \uc774\ubbf8\uc9c0 \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \ud544\uc694\ud558\ub2e4. Calibre-Web \uc790\uccb4\ub294 \ud30c\uc774\uc36c\ub9cc \uc788\uc73c\uba74 \uc124\uce58\uc640 \uad6c\ub3d9\uc774 \uac00\ub2a5\ud558\uc9c0\ub9cc, \uc6f9\uc5d0\uc11c ebook-convert \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 Calibre-Server \ub97c \ub530\ub85c \uc124\uce58\ud574\uc57c \ud55c\ub2e4. <\/p>\n\n\n\n<p>\ud5f7\uac08\ub9b4\uae4c\ubd10 \uc870\uae08 \uc124\uba85\uc744 \ubd99\uc774\uc790\uba74, Calibre-Server \ub294 \ub85c\uceec\uc5d0\uc11c \uc6b4\uc6a9\ud558\ub294 Calibre \uc5d0 \ubd99\uc5b4\uc788\ub294 server \uae30\ub2a5\uc744 \ub530\ub85c \ubd84\ub9ac\ud574 \ub193\uc740 \uac83\uc774\ub2e4. \uadf8\ub798\uc11c \uc5f4\ub78c, \ubaa9\ub85d\uad00\ub9ac, \uc5c5\ub85c\ub4dc \ub4f1\uc774 \uac00\ub2a5\ud558\uae34 \ud558\uc9c0\ub9cc, \ub108\ubb34 \ud22c\ubc15\ud558\uace0 \uac04\ub2e8\ud574\uc11c \uc720\uc838 \uad00\ub9ac \uad8c\ud55c \uac19\uc740\uac74 \uc5b8\uac10\uc0dd\uc2ec\uc774\ub2e4. \ud558\uc9c0\ub9cc \ub85c\uceec\uc758 Calibre \ub85c \uad00\ub9ac\uc640 \uc5f4\ub78c\uc744 \ud558\uace0, \uc800\uc7a5\uc18c\ub9cc \ub530\ub85c \ubd84\ub9ac\ud558\ub294 \uc2dd\uc73c\ub85c \uc6b4\uc6a9\ud55c\ub2e4\uba74 \uc624\ud788\ub824 \uc774\ucabd\uc774 \ub354 \ub098\uc744\uc218\ub3c4 \uc788\ub2e4. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>shell &gt; pkg update &amp; pkg upgrade -y\nshell &gt; pkg install py39-pip py39-lxml py39-cython py39-sqlite3 sqlite3 rust\n.....\nProceed with this action? &#91;y\/N]: y<\/code><\/pre>\n\n\n\n<p>\ub098\ub294 pip \ub9cc \uc124\uce58\ud558\uace0, \uadf8 pip \ub85c Calibre-Web \uc744 \uc124\uce58\ud558\uba74\uc11c \uc5c6\ub2e4\uace0 \uc9d5\uc9d5\ub300\ub294 \ud328\ud0a4\uc9c0\ub4e4\uc744 pkg \ub97c \uc774\uc6a9\ud574 \ud558\ub098\uc529 \ucd94\uac00\ud558\ub294 \uc2dd\uc73c\ub85c \ud588\ub2e4. \uc704 \ubaa9\ub85d\uc740 \ucd5c\ucd08 \uc2e4\ud589\ud560 \ub54c \uc5d0\ub7ec \uba54\uc2dc\uc9c0\uac00 \uc548 \ub098\uac8c \ud558\ub294 \uc815\ub3c4\uace0, \uc6b4\uc6a9\ud558\uba74\uc11c \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub294 \uadf8\ub54c\uadf8\ub54c \ucd94\uac00\ud574 \uc918\uc57c \ud55c\ub2e4. \uc0ac\uc2e4, \ucd94\uac00 \ud328\ud0a4\uc9c0 \ub300\ubd80\ubd84\uc740 ebook-convert \uc5d0 \uad00\ub828\ub41c \uac83\ub4e4\uc774\ub77c \ub2f9\uc7a5 \uc5c6\ub2e4\uace0 \ud574\ub3c4 \uc2e4\ud589\uc5d4 \ubcc4 \uc601\ud5a5\uc740 \uc5c6\ub2e4. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>shell &gt; pip install calibreweb<\/code><\/pre>\n\n\n\n<p>\uc124\uce58\uac00 \ub2e4 \ub418\uba74 \uc2e4\ud5d8\uc0bc\uc544 \uc2e4\ud589\ud574 \ubcf8\ub2e4. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>shell &gt; su caluser -c cps&amp;<\/code><\/pre>\n\n\n\n<p>\uadf8\ud6c4 \uc6f9 \ube0c\ub77c\uc6b0\uc838\ub85c \ud574\ub2f9 Jail \uc758 IP:8083 \uc73c\ub85c \uc811\uc18d\ud574\ubcf8\ub2e4. &#8216;192.168.0.99:8083&#8217; \uac19\uc740 \uc2dd\uc774\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\uc2dc\uc791 \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc131<\/h4>\n\n\n\n<p>Jail \uc774 \uc2dc\uc791\ud558\uba74 \uc790\ub3d9\uc73c\ub85c \uc2dc\uc791\ub418\ub3c4\ub85d rc.d \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc791\uc131\ud55c\ub2e4. \ube44\uc2b7\ud558\uac8c \ud30c\uc774\uc36c\uc73c\ub85c \uad6c\ub3d9\ub418\ub294 JupyterLab \uc758 \uc2a4\ud06c\ub9bd\ud2b8\uac00 \ub9ce\uc740 \ucc38\uace0\uac00 \ub418\uc5c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>shell &gt; cd \/usr\/local\/etc\/rc.d\nshell &gt; vi calibreweb<\/code><\/pre>\n\n\n\n<p>\uc5d0\ub514\ud130\uc5d0 \uc544\ub798 \ub0b4\uc6a9\uc744 \ubd99\uc5ec\ub123\ub294\ub2e4. user name \uacfc home \ud3f4\ub354\uc758 \uacbd\ub85c\uc5d0 \uc8fc\uc758\ud55c\ub2e4. \ub9cc\uc57d root \ub85c \uc124\uce58\ud558\uace0 \uc2e4\ud589\ud55c\ub2e4\uba74 \uac15\uc870\ub41c \ubd80\ubd84\ub4e4\uc744 \uc218\uc815\ud574\uc57c \ud55c\ub2e4. \uadf8\ub7ec\ub2c8 \uadf8\ub0e5 user \ub85c \uc6b4\uc6a9\ud558\uc790&#8230;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/sh\n. \/etc\/rc.subr\nname=calibreweb\n<strong>command<\/strong>=<strong><mark style=\"background-color:#ff8737\" class=\"has-inline-color\">\/home\/caluser\/.local\/bin\/cps<\/mark><\/strong>\nrcvar=calibreweb_enable\nload_rc_config $name\ncalibreweb_enable=\"${calibreweb_enable-\"NO\"}\"\ncalibreweb_user=\"${calibreweb_user-<mark style=\"background-color:#ff8737\" class=\"has-inline-color\">\"<strong>caluser<\/strong>\"<\/mark>}\"\n<strong>start_cmd<\/strong>=\"<strong><mark style=\"background-color:#ff8737\" class=\"has-inline-color\">su ${calibreweb_user} -c <\/mark><\/strong>'${command}'&amp;\"\nstop_cmd=\"${name}_stop\"\nstatus_cmd=\"${name}_status\"\ncalibreweb_stop()\n{\n    calibreweb_pid=$(<mark style=\"background-color:#07d79c\" class=\"has-inline-color\"><strong>pgrep -u ${calibreweb_user} -f ${command}<\/strong><\/mark>)\n    echo \"Stopping ${name}.\"\n    kill -s TERM \"${calibreweb_pid}\"\n}\ncalibreweb_status()\n{\n    calibreweb_pid=$(<strong><mark style=\"background-color:#07d79c\" class=\"has-inline-color\">pgrep -u ${calibreweb_user} -f ${command}<\/mark><\/strong>)\n    if &#91; -n \"${calibreweb_pid}\" ];\n    then\n        echo \"${name} running with pid: $calibreweb_pid\"\n    else\n        echo \"${name} not running? (pid not found)\"\n    fi\n}\ncommand_args=\"\"\nload_rc_config $name\nrun_rc_command \"$1\"<\/code><\/pre>\n\n\n\n<p>\uc704 \uc2a4\ud06c\ub9bd\ud2b8\uc758 stop, status \uc5d0 \uc788\ub294 pid \ub97c \uac00\uc838\uc624\ub294 \uba85\ub839 ( pgrep ) \uc5d0 \uc870\uc2ec\ud574\uc57c \ud560 \ubd80\ubd84\uc774 \uc788\ub2e4. su \uba85\ub839\uc744 \ud1b5\ud574 \uc2e4\ud589\ud558\uae30 \ub54c\ubb38\uc5d0 command \ub9cc\uc73c\ub85c \uac80\uc0c9\ud558\uba74 su \uba85\ub839 + \uc2e4\uc81c \uc2e4\ud589\ud558\ub294 Python \ud574\uc11c \ub450\uac1c\uc758 PID \uac00 \ub098\uc628\ub2e4. \ubb50, \ub450\uac1c \ub098\uc640\ub3c4 \ub458 \uc911 \ud558\ub098\ub9cc \uc885\ub8cc\ud558\uba74 \ub418\uae34 \ud558\uc9c0\ub9cc, \uadf8\ub798\ub3c4 \ucc1c\ucc1c\ud558\ub2c8\uae4c&#8230; \uadf8\ub798\uc11c user \ub791 command \ub97c \uac19\uc774 \uc870\uac74\uc744 \uac78\uc5b4 \uac80\uc0c9\ud588\ub2e4. \ub9cc\uc57d root \ub85c \uc2e4\ud589\ud55c\ub2e4\uba74 \uadf8\uc5d0 \ub9de\uac8c \uc801\ub2f9\ud788 \uc635\uc158\uc744 \uc218\uc815\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p>\ubd80\ud305 \ub420 \ub54c \uc2dc\uc791\ub418\ub3c4\ub85d rc.d \uc5d0 \ub4f1\ub85d\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>shell &gt; sysrc calibreweb_enable=YES<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">metadata.db \ud30c\uc77c\uc744 \ubcf5\uc0ac<\/h4>\n\n\n\n<p>\uc774 \ubd80\ubd84\uc774\uc57c \ub9d0\ub85c \uc81c\uc791\uc790\uc758 \uc758\ub3c4\ub97c \uac00\uc7a5 \uc798 \uc54c \uc218 \uc788\ub2e4. CalibreWeb \uc740 metadabase.db \ud30c\uc77c\uc744 \uc0dd\uc131\ud558\uc9c0 \ubabb\ud55c\ub2e4. \uadf8\ub798\uc11c \ub85c\uceec\uc758 Calibre \uc571\uc5d0\uc11c \uae68\ub057\ud55c metadata.db \ud30c\uc77c\uc744 \uc0dd\uc131\ud574\uc11c \uc800\uc7a5\uc18c\ub85c \uc0ac\uc6a9\ud560 \ud3f4\ub354\uc5d0 \ub123\uc5b4\uc918\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"732\" height=\"416\" src=\"https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/02\/Screenshot_20240204_170206.png\" alt=\"\" class=\"wp-image-92\" style=\"width:400px\" srcset=\"https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/02\/Screenshot_20240204_170206.png 732w, https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/02\/Screenshot_20240204_170206-300x170.png 300w\" sizes=\"auto, (max-width: 732px) 100vw, 732px\" \/><\/figure>\n\n\n\n<p>\uc801\ub2f9\ud55c \uc704\uce58\uc5d0 \uc11c\uc7ac\ub97c \uc0c8\ub85c \uc0dd\uc131\ud558\uace0, \uadf8 \ud3f4\ub354 \uc548\uc5d0 \uc788\ub294 metadata.db \ud30c\uc77c\uc744 \uc0c8\ub85c\uc6b4 \uc800\uc7a5\uc18c\ub85c \ubcf5\uc0ac\ud55c\ub2e4. \uc218\ub2e8\uacfc \ubc29\ubc95\uc744 \uac00\ub9ac\uc9c0 \ub9d0\uace0&#8230;\u314b\u314b\u314b<\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-abe32373-f1c8-4858-b5d6-5ab0cc41c350\" href=\"https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/02\/metadata.db_.zip\">metadata.db_<\/a><a href=\"https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/02\/metadata.db_.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-abe32373-f1c8-4858-b5d6-5ab0cc41c350\">\ub2e4\uc6b4\ub85c\ub4dc<\/a><\/div>\n\n\n\n<p>\ub0b4 calibre \uc5d0\uc11c \uc0dd\uc131\ud55c\uac70\ub77c \uc5b4\ub5a4 \uc124\uc815\uc774 \uc11e\uc600\uc744\uc9c0 \ubaa8\ub974\uaca0\uc9c0\ub9cc&#8230; \uc774\uac78 wget \uc73c\ub85c \ubc1b\uc544\uc11c \uc800\uc7a5\ud558\uba74 \ubcc4 \ubb38\uc81c \uc5c6\uc744\uac70\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\ud655\uc778<\/h4>\n\n\n\n<p>\uc544\ub9c8 50MB \ub97c \uc804\ud6c4\ub85c cbz \uac00 \uc798 \uc548 \uc5f4\ub9ac\uac70\ub098 \uc18d\ub3c4\uac00 \ub300\ub2e8\ud788 \ub290\ub9ac\ub2e4. \uc774\uc720\ub294 \ubaa8\ub974\uaca0\uc9c0\ub9cc \uc81c\uc791\uc790\uac00 cbz \ub97c \uc5f4\ub78c \ud560 \ub54c, \ub85c\uceec \uce90\uc2dc\ub098 \uc778\ub371\uc2a4\uc6a9 \uc378\ub124\uc77c\uc744 \ub3c4\uc785\ud560 \ubc95 \ud55c\ub370\ub3c4 \uc544\uc9c1\uae4c\uc9c0 \ud574\ub2f9 \uae30\ub2a5\uc744 \uad6c\ud604\ud558\uc9c0 \uc54a\uc558\ub2e4. \ub0b4 \uc0dd\uac01\uc73c\ub85c\ub294 \uadf8\ub0e5 \ub85c\uceec\uc5d0\uc11c pdf \ub098 epub \ub85c \ubcc0\ud658\ud574\uc11c \uad00\ub9ac\ud558\ub77c\ub294 \uac83 \uac19\ub2e4. epub \ub294 ebook \uae30\uae30\uc5d0 \uc62e\uae30\uba74 \uc798 \ub418\uc9c0\ub9cc CalibreWeb \uc5d0\uc11c\ub294 \ucd08\ubc18 \uba87 \uc7a5\ub9cc \uc5f4\ub824\uc11c \ub531 \ud655\uc778\ub9cc \uac00\ub2a5\ud55c \uc218\uc900\uc774\uace0, pdf \ub294 600MB \uac00 \ub118\ub294 \ud30c\uc77c\ub3c4 \uc0c1\ub2f9\ud788 \uc6d0\ud65c\ud558\uac8c \ubcfc \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p>\uc81c\uc791\uc790\ub294 \uc5c5\ub85c\ub4dc \uc6a9\ub7c9\uc870\ucc28 \uae30\ubcf8\uc73c\ub85c \uc124\uc815\ub41c 100MB \ub97c \uac74\ub4dc\ub9ac\uc9c0 \uc54a\uc558\ub2e4. \ub098\ub294 \ub530\ub85c Tornado \uc11c\ubc84 \uc124\uc815\uc744 \uc218\uc815\ud574\uc11c GB \ub2e8\uc704\ub85c \ub298\ub824 \ub193\uae34 \ud588\uc9c0\ub9cc, \uc2e4\uc81c \uc6b4\uc6a9\ud574\ubcf4\ub2c8 \uadf8\ub2e5 \uc4f8\ub370\ub294 \uc5c6\ub2e4. CalbreWeb \uc5d0\uc11c Upload \ud558\uba74 \uc911\ubcf5\uccb4\ud06c\ub3c4 \ub418\uc9c0 \uc54a\uace0, \ud30c\uc77c \uc774\ub984\uc5d0\uc11c \uc81c\ubaa9\uacfc \uc800\uc790 \ub4f1\uc744 \ud30c\uc2f1\ud558\ub294 \uac83\ub3c4 \uc548\ub418\uc11c \uae09\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \uc815\ub3c4\uc5d0 \ubd88\uacfc\ud558\ub2e4. \uc544\ub9c8 \uc81c\uc791\uc790\ub3c4 \uadf8\ub0e5 \ub85c\uceec\uc5d0\uc11c \uad00\ub9ac\ud558\uace0 SMB \ub098 FTP \ub4f1\uc744 \uc774\uc6a9\ud574 Sync \ud558\ub294 \uac78 \uc5fc\ub450\uc5d0 \ub450\ub294 \uac83 \uac19\ub2e4.<\/p>\n\n\n\n<p>\uc800\uac83 \uc678\uc5d0\ub3c4 \uc774\ub7f0\uc800\ub7f0 \ub2e8\uc810\uc774 \uc788\uae34 \ud558\uc9c0\ub9cc, \ud604\uc874\ud558\ub294 \ubb34\ub8cc \uc194\ub8e8\uc158 \uc911\uc5d0\uc11c\ub294 \uc6d0\ud0d1\uc774\ub77c\uace0 \uac10\ud788 \uce6d\ud558\uace0 \uc2f6\ub2e4. \ubb3c\ub860 \uc778\ud130\ub137\uc740 \uc5f0\uacb0\ub418\uc5b4 \uc788\uc5b4\uc57c \ud558\uc9c0\ub9cc, \uc5b8\uc81c \uc5b4\ub514\uc11c\ub4e0, \uc544\uc774\ud328\ub4dc\uac74, \uc548\ub4dc\ub85c\uc774\ub4dc\uac74 \uc0c1\uad00\uc5c6\uc774 \uc8fc\uc18c \uce58\uace0 \ub4e4\uc5b4\uac00\uc11c \ucc45\uc744 \ud074\ub9ad\ud558\uba74   \ub531                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \uc5f4\ub9ac\ub294\uac83\ub3c4 \ud3b8\ub9ac\ud558\uace0, \uc720\uc838 \uad00\ub9ac\uac00 \ub418\ub2c8\uae4c \uc57c\ud55c\ucc45 \ub123\uc5b4\ub194\ub3c4 \ud0dc\uadf8\ub9cc \ub531 \uac78\uc5b4\ub193\uc73c\uba74 \ub2e4\ub978 \uc0ac\ub78c\uc774 \ubcfc \uc5fc\ub824 \uc5c6\uc774 \ud544\uc694\ud55c \ucc45\uc774\ub098 Report \ub97c \uacf5\uc720 \ud560 \uc218\ub3c4 \uc788\uace0&#8230;\u314b\u314b<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"944\" height=\"704\" src=\"https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/02\/image.jpg\" alt=\"\" class=\"wp-image-87\" style=\"width:400px\" srcset=\"https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/02\/image.jpg 944w, https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/02\/image-300x224.jpg 300w, https:\/\/blog.gerd.kr\/wp-content\/uploads\/2024\/02\/image-768x573.jpg 768w\" sizes=\"auto, (max-width: 944px) 100vw, 944px\" \/><figcaption class=\"wp-element-caption\">\ub2e4 \uc5f4\ub9b0\ub2e4!!!<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>TreuNAS \uc5d0\uc11c\ub294 Calibre-Web \uc744 \ucee4\ubba4\ub2c8\ud2f0 \ud50c\ub7ec\uadf8\uc778\uc73c\ub85c \uc81c\uacf5\ud558\ub294\ub370, \uc9c0\uae08 \ub0b4\uac00 \uc0ac\uc6a9\ud558\uace0 \uc788\ub294 \ubc84\uc83c\uc5d0\uc11c\ub294 \uc124\uce58\uac00 \ub418\uc9c8 \uc54a\uc558\ub2e4. \ubb50\ub77c\ubb50\ub77c \ud558\ub294\ub370 \uc2e0\uacbd\uc4f0\uae30 \uadc0\ucc2e\uc544\uc11c \uadf8\ub0e5 \uc218\ub3d9\uc73c\ub85c \uc124\uce58\ud588\ub2e4. \uc5b4\ucc28\ud53c \ud50c\ub7ec\uadf8\uc778\uc73c\ub85c \uc124\uce58\ud574\ub3c4 rc.d \uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc57c\ub9ac\uaf2c\ub9ac\ud574\uc11c \ub530\ub85c \uc190\uc744 \ub300\uc57c \ud55c\ub2e4. \uc774\uc655 \uc774\ub807\uac8c \ub41c \uac70 \ud558\ub098\ud558\ub098 \uc815\ub9ac\ud574\ubcf4\ub824\uace0 \ud55c\ub2e4. Calibre-Web \uc740 \ubb54\uac00? \uc774\ub984\uc5d0\uc11c \uc9d0\uc791\ud560 \uc218 \uc788\ub4ef\uc774 Calibre ( \uce98\ub9ac\ubc84 \ub77c\uace0 \uc77d\ub354\ub77c&#8230; ) \ub77c\ub294, \ub9ac\ub205\uc2a4\uc5d0\uc11c\ub294 \uc720\uad6c\ud55c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[31,30,34,32,33,8],"class_list":["post-74","post","type-post","status-publish","format-standard","hentry","category-truenas","tag-calibre","tag-calibreweb","tag-python","tag-rc-d","tag-script","tag-truenas"],"_links":{"self":[{"href":"https:\/\/blog.gerd.kr\/index.php?rest_route=\/wp\/v2\/posts\/74","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.gerd.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.gerd.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.gerd.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.gerd.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=74"}],"version-history":[{"count":38,"href":"https:\/\/blog.gerd.kr\/index.php?rest_route=\/wp\/v2\/posts\/74\/revisions"}],"predecessor-version":[{"id":315,"href":"https:\/\/blog.gerd.kr\/index.php?rest_route=\/wp\/v2\/posts\/74\/revisions\/315"}],"wp:attachment":[{"href":"https:\/\/blog.gerd.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=74"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.gerd.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=74"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.gerd.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=74"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}