Jdownloader 는 java 기반의 다운로드 프로그램입니다. 다른 다운로드 프로그램과 비교해서 몇 가지 장점이 있습니다.
- 매우 다양한 사이트 지원
- 수천가지가 넘는 사이트의 다운로드를 지원합니다. 유튜브나 드롭박스, MEGA 와 같은 메이저 사이트부터, 거의 알려지지 않은 마이너 사이트까지 지원합니다.
만약 지원하지 않는 사이트의 URL 을 추가 할 시, 해당 사이트를 분석해서 다운로드 받을 수 있는 것들의 리스트를 표시합니다.
당연히, 단순 파일(예: https://example.com/asdf.mp4) 나 ftp (ftp://data.example.com/qwer.txt) 와 같은 것도 다운로드 할 수 있습니다.
- 수천가지가 넘는 사이트의 다운로드를 지원합니다. 유튜브나 드롭박스, MEGA 와 같은 메이저 사이트부터, 거의 알려지지 않은 마이너 사이트까지 지원합니다.
- 병렬 다운로드
- 여러 개의 다운로드를 동시에 진행해 최대한 빠른 속도로 다운로드 할 수 있도록 합니다. 이는 느린 사이트나 회선으로 파일을 받을 때 유용하게 쓰입니다.
- GUI와 Web컨트롤이 가능
- GUI 기반의 프로그램이고, MyJdownloader 라는 웹사이트에서 제어가 가능합니다.
- 편리한 사용
- 사용 방법이 간단합니다. 다운로드 받고자 하는 URL을 입력하면 스스로 사이트를 분석합니다.
- 다양한 OS 지원
- JAVA 기반의 프로그램이다 보니 JAVA 가 설치되어 있다면 어떤 OS에도 설치할 수 있습니다. 당연히 FreeBSD 에도 설치가 가능합니다.
- 활발한 개발
- 매우 활발하게 개발되고 있는 프로그램이며, 자주 업데이트됩니다.
아주 많은 사이트를 지원하고, 사용하기 쉬우며, java 기반이라 설치가 쉽습니다. 그리고 헤드리스 시스템인 FreeNAS 에서도 설치하고 https://my.jdownloader.org/ 에서 원격 컨트롤이 가능합니다.
허나 웹사이트에서 원격 컨트롤을 하면 반응 속도가 늦다는 문제가 있습니다.
그래서 VNC 를 연결해 직접 GUI 를 통해 컨트롤 할 수 있도록 해 보겠습니다. 사용할 프로그램은 x11vnc 와 xvfb 입니다.
jail 만들기
jail의 이름은 downloader
자동 시작 설정 해 주세요.
마운트 포인트
iocage exec downloader mkdir -p /mnt/download
다운로드 한 파일이 저장될 디렉토리를 만들고
iocage stop downloader
감옥을 정지시켜 준 다음
/mnt/Data/Downloade/ ↔ /mnt/download
마운트 해 주세요.
jdownloadre 설치
iocage console downloader
감옥으로 로그인 해 주세요.
최신 레포로 바꾸기
‘port 와 pkg – 레포 바꾸기‘ 를 참고하여 레포를 최신으로 바꿔 주세요.
필요한 패키지 설치
pkg install openjdk8 x11vnc xorg-vfbserver ffmpeg
그룹과 유저 만들기
pw group add -n downloader -g 3000
GID 3000 의 downloader 유저를 만들었습니다.
pw user add jdownloader -m -d /home/jdownloader -s /bin/csh -u 3001 -g downloader -c "user for jdownloader"
UID 3001 의 홈 디렉토리 /home/jdownloader 이고 csh 쉘을 사용하는 jdownloader 유저를 만들었습니다.
유저 프로파일 수정
vi /home/jdownloader/.cshrc
setenv DISPLAY :1 setenv LC_CTYPE en_US.UTF-8 setenv LANG en_US.UTF-8 setenv LC_COLLATE C
제일 밑에 위의 설정을 추가해 주세요.
jdownloader가 설치될 디렉토리 만들기
mkdir /usr/local/jdownloader
jdownloader 가 설치될 디렉토리를 만들고
chown -R jdownloader:downloader /usr/local/jdownloader
권한을 줍니다.
Jdownloader 다운로드
그 후 jdownloader 를 받아야 합니다. 아래 사이트에서 other 를 선택하고 다운로드 해 주세요. mega.nz 에서 받아 오는 것이라서 쉘 에서 받는 것 보다 데스크탑에서 받고 서버로 집어 넣는 것이 더 편합니다.
http://jdownloader.org/download/index
다운로드 받은 JDownloader.jar 파일을 /usr/local/jdownloader 에 넣어 주세요. 파일 이름은 반드시 JDownloader.jar 이여야만 합니다. 파일 이름이 JDownloader.jar 가 아닐 시 에러가 납니다.
chown jdownloader:downloader /usr/local/jdownloader/JDownloader.jar
권한 설정까지 해 주세요.
초기 실행
cd /usr/local/jdownloader
jdownloader 가 설치된 디렉토리로 이동한 다음
su jdownloader -c 'java -Djava.awt.headless=true -jar /usr/local/jdownloader/JDownloader.jar -norestart'
jdownloader 권한으로 JDownloader.jar 을 실행해 줍니다.
초기 설치와 업데이트를 진행하는 것입니다. 시간이 좀 걸립니다. 아래와 같은 문구가 나타날때까지 기다려 줍니다.
|---------------------------Headless Information------------------------------- | Restart Required | JDownloader Updated Itself and will exit now. | Please restart JDownloader after a few seconds. | Make sure that there is no running JDownloader process before restarting. |------------------------------------------------------------------------------
초기 실행이 끝나면 쉘로 돌아옵니다.
시작 스크립트 만들기
또한, rc 스크립트에 몇 가지 오타가 있음을 확인해 수정하였습니다.
vi /usr/local/etc/rc.d/jdownloader
#!/bin/sh # # PROVIDE: jdownloader # KEYWORD: shutdown # # Author : Admion! # # https://admion.net # # Add the following lines to /etc/rc.conf to enable the jdownloader: # # jdownloader_enable: NO is default. Set it to YES to enable jdownloader. # # jdownloader_screen_size: vnc screen size. 1024x700x8 is default. # # jdownloader_vnc_port: vnc listening port. 4817 is default. # # jdownloader_max_memory: Maximum memory to be used by jdownloader. 1024m is default. # It is recommended to set this value to more than 1536m # # jdownloader_vnc_password: If you want to set a password for vnc, set this value to "YES". NO is default. # # jdownloader_vnc_pwfile: The location of the file where the vnc password is stored. /home/jdownloader/.vnc/passwd is default. # . /etc/rc.subr name=jdownloader rcvar="${name}_enable" start_cmd="${name}_start" stop_precmd="${name}_stop_precmd" stop_postcmd="${name}_stop_postcmd" stop_cmd="${name}_stop" load_rc_config $name : ${jdownloader_enable="NO"} : ${jdownloader_screen_size="1024x700x8"} : ${jdownloader_vnc_port="4817"} : ${jdownloader_max_memory="1024m"} : ${jdownloader_vnc_password="NO"} : ${jdownloader_vnc_pwfile="/home/jdownloader/.vnc/passwd"} jdownloader_start() { if [ "${jdownloader_vnc_password}" == "YES" ]; then if [ -f ${jdownloader_vnc_pwfile} ]; then export _jd_vnc_passwd="-rfbauth ${jdownloader_vnc_pwfile}" else echo "password file doesn't exist!" export _jd_vnc_passwd="" fi else export _jd_vnc_passwd="" fi export _jd_screen_size=$jdownloader_screen_size export _jd_vnc_port=$jdownloader_vnc_port export _jd_max_memory=$jdownloader_max_memory su jdownloader -c 'daemon -f -P /usr/local/jdownloader/xvfb_daemon.pid -p /usr/local/jdownloader/xvfb.pid /usr/local/bin/Xvfb :1 -screen 0 ${_jd_screen_size}' su jdownloader -c 'daemon -f -P /usr/local/jdownloader/x11vnc_daemon.pid -p /usr/local/jdownloader/x11vnc.pid /usr/local/bin/x11vnc ${_jd_vnc_passwd} -display :1 -forever -rfbport ${_jd_vnc_port} -loop' su jdownloader -c 'daemon -r -f -P /usr/local/jdownloader/jdownloader_daemon.pid -p /usr/local/jdownloader/jdownloader.pid /usr/local/bin/java -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8 -Xms512m -Xmx${_jd_max_memory} -jar /usr/local/jdownloader/JDownloader.jar ' echo jdownloader start } jdownloader_stop_precmd() { if [ -r /usr/local/jdownloader/xvfb_daemon.pid ]; then _jd_xvfb_deamon_pid=$(check_pidfile /usr/local/jdownloader/xvfb_daemon.pid daemon) _jd_xvfb_pid=$(pgrep -F /usr/local/jdownloader/x11vnc.pid) fi if [ -r /usr/local/jdownloader/x11vnc_daemon.pid ]; then _jd_x11vnc_deamon_pid=$(check_pidfile /usr/local/jdownloader/x11vnc_daemon.pid daemon) _jd_x11vnc_pid=$(pgrep -F /usr/local/jdownloader/x11vnc.pid) fi if [ -r /usr/local/jdownloader/jdownloader_daemon.pid ]; then _jd_jdownloader_deamon_pid=$(check_pidfile /usr/local/jdownloader/jdownloader_daemon.pid daemon) _jd_jdownloader_pid=$(pgrep -F /usr/local/jdownloader/jdownloader.pid) fi } jdownloader_stop() { if [ -n "${_jd_xvfb_deamon_pid}" ]; then kill ${_jd_xvfb_deamon_pid} fi if [ -n "${_jd_x11vnc_deamon_pid}" ]; then kill ${_jd_x11vnc_deamon_pid} fi if [ -n "${_jd_jdownloader_deamon_pid}" ]; then kill ${_jd_jdownloader_deamon_pid} fi wait_for_pids ${_jd_xvfb_pid} ${_jd_x11vnc_pid} ${_jd_jdownloader_pid} } jdownloader_stop_postcmd() { echo "Cleaning up leftover child processes." if [ x$(ps ${_jd_xvfb_pid} | awk '{ if ($1=="${_jd_xvfb_pid}") print $1 }') = x$_jd_xvfb_pid ]; then echo "kill lefover Xvfb processes." kill -9 ${_jd_xvfb_pid} fi if [ x$(ps ${_jd_x11vnc_pid} | awk '{ if ($1=="${_jd_x11vnc_pid}") print $1 }') = x$_jd_x11vnc_pid ]; then echo "kill lefover x11vnc processes." kill -9 ${_jd_x11vnc_pid} fi if [ x$(ps ${_jd_jdownloader_pid} | awk '{ if ($1=="${_jd_jdownloader_pid}") print $1 }') = x$_jd_jdownloader_pid ]; then echo "kill lefover jdownloader processes." kill -9 ${_jd_jdownloader_pid} fi wait_for_pids ${_jd_xvfb_pid} ${_jd_x11vnc_pid} ${_jd_jdownloader_pid} echo jdownloader stop } run_rc_command "$1"
chmod 555 /usr/local/etc/rc.d/jdownloader
실행 가능하도록 만들어주었습니다.
(선택) vnc 비밀번호 설정하기
su jdownloader -c 'x11vnc -storepasswd'
Enter VNC password: Verify password: Write password to /home/jdownloader/.vnc/passwd? [y]/n y
vnc 에 비밀번호를 설정할 경우 vnc 에 연결할 때 설정한 비밀번호를 입력해야 접속할 수 있습니다.
sysrc jdownloader_vnc_password="YES"
비밀번호를 사용하도록 설정해 줍니다.
rc.conf 수정
sysrc jdownloader_enable="YES"
Jdownloader 를 서비스에 등록합니다.
sysrc jdownloader_screen_size="스크린 사이즈"
VNC 화면 크기를 설정할 수 있습니다. 가로x세로x색비트 형식으로 입력하면 됩니다.
기본값은 1024x700x8 입니다.
sysrc jdownloader_vnc_port="vnc 포트 번호"
1024 이상의 포트를 vnc 포트로 설정할 수 있습니다.
기본값은 4817 입니다.
sysrc jdownloader_max_memory="메모리크기"
jdownloader 가 사용할 수 있는 최대 메모리를 설정합니다. 1536m 이상으로 설정하는 것을 추천합니다. 기본값은 1024m 입니다.
Jdownloader 시작
service jdownloader start
jdownloader 를 시작해 줍니다.
접속
VNC 클라이언트 (Real VNC 와 같은) 를 이용해 jdownloader.jail.IP:4817 으로 접속해 주면 jdownloader 의 GUI를 볼 수 있습니다.
ffmpeg 설정
유튜브 등의 영상을 다운로드 받을 시 ffmpeg 가 없다고 하는 경고가 나올 수 있습니다. jdownloader 의 GUI의 상단의 setting 에서 setting 을 누르면 설정 메뉴로 이동합니다.
Advanced Setting 에서
FFmpegSetup: Binary Patch 〓 /usr/local/bin/ffmpeg
FFmpegSetup: Binary Patch Probe 〓 /usr/local/bin/ffprobe
으로 설정해 ffmpeg 의 경로를 지정해 주면 경고가 사라지고 다운로드가 정상적으로 됩니다.
MyJdownloader 연결 (선택)
my.jdownloader 에서 jdownlaoder 를 컨트롤 하고 싶다면, my.jdownloader.org 에서 회원가입을 한 후, Jdownloader 의 GUI 에서 My.Jdownloader 의 my account 에 가입한 계정과 비밀번호를 입력해 주면 됩니다.
업데이트
service jdownloader stop
jdownloader 를 중지하고
pkg update && pkg upgrade
패키지를 업데이트 한 다음
service jdownloader start
jdownloader 를 시작해 줍니다.
문제점
GUI 에서 영어를 제외한 언어가 깨집니다. 파일 저장은 정상적으로 되는데 GUI에서만 이름이 깨지는 것으로 보아 폰트 문제인 것 같긴 한데, 어덯게 해결해야 할지 모르겠습니다. 아시는 분은 댓글로 피드백 남겨 주시면 감사하겠습니다.
마치면서
Jdownloader 를 Guacamole 에 연결하면 좀더 편리하게 사용할 수 있습니다.
다음 포스팅은 서버를 백업하는 방법에 대해서 다룹니다.