FreeNAS(TrueNAS)/Jail 에 jupyter notebook 설치하기

By | 2021년 07월 25일

FreeNAS에 jupyter notebook을 설치하는 방법에 대해 정리하였다. 이 설치 방법은 Daniel Curtis 가 작성한 Install Jupyter Notebook on FreeBSD 에 기초하여 작성하였다.

1. FreeNAS에 Jail 설치

1) 먼저 FreeNAS 메뉴얼을 참조하여 jail을 설치한다.
2) 설치한 Jail로 login 한다.

jail이 설치된 FreeBSD에서 테미날 앱을 실행시킨 후, 터미날에서

# jls

를 실행하여 설치된 jail list를 확인한 후, jail shell 로 들어간다.
이를 위해

# su
# jexec "jail_no" csh

를 실행한다. 그리고 에디터 vim을 설치한다.

# pkg install vim

2. Jupyter user 생성

Jail 내에서 다음의 명령을 실행한다.

# pw add user -n jupyter -m -s /bin/sh -c "Jupyter Notebook" 

3. Python 3와 관련 패키지 설치

# pkg install python3 py38-{pip,pandas,numpy,matplotlib,setuptools,virtualenv,pyzmq}

4. jupyter 또는 jupyterlab설치

# pip3 install jupyter

또는

# pkg install py38-jupyterlab

5. jupyter 로그인 비밀 번호 생성

 # python3

 Python 3.8.12 (default, Nov 4  2021, 01:21:17) 
 .
 .
  >>> from notebook.auth import passwd; passwd()

6. Config 파일 설치

다음의 명령어로 config 파일을 생성한다.

 su - jupyter -c "jupyter notebook --generate-config" 

다음과 같이 config file을 수정한다.

 vim /home/jupyter/.jupyter/jupyter_notebook_config.py

아래의 항목을 찾아 줄 앞에 있는 #을 제거하고 앞에서 복사해 둔 비밀번호를 인용부호 사이에 기입한다.

c.NotebookApp.password = ''

그리고 다음의 항목을 상황에 맞게 수정하여 준다

c.NotebookApp.ip ='192.168.0.1'
c.NotebookApp.open_browser = False
c.NotebookApp.notebook_dir  = '/media/jupyter'
c.NotebookApp.port = 8888'

7. 시작 스크립트 생성

다음과 같이 폴더를 생성하여 준다.

mkdir /media/jupyter
chown jupyter:jupyter /media/jupyter
mkdir /var/run/jupyter
chown jupyter /var/run/jupyter

아래와 같이 인터넷에 나와있는 방법으로 시작 스크립트를 설치하면 이상하게도 gnuplot, R 과 같이 multi kernel을 설치시 jupyter가 제대로 작동하지 않았다. 그래서 다음과 같은 방법으로 설치하였다.

설치방법 1

cd /usr/local/etc/rc.d
vim jupyter.sh

설치한 jupyter 다음 내용을 넣어준다.

!#/bin/sh
#su - jupyter -c 'jupyter notebook'
su - jupyter -c 'jupyter lab'

파일을 저장한 후

chmod a+x jupyter.sh

jail을 재시작한 후

http://ip-address:8888

로 jupyter 실행

설치방법 2

아래와 같이 설치시 python3 kernel에 대해서는 잘 작동하나, 다른 언어의 kernel을 추가로 설치하면 작동이 잘 않됨.

다음과 같이 시작 스크립트를 만들어 준다.

mkdir /usr/local/etc/rc.d/
vi /usr/local/etc/rc.d/jupyter

다음의 내용을 넣어준다.

#!/bin/sh
#
# PROVIDE: jupyter
# REQUIRE: LOGIN
#
# Add the following lines to /etc/rc.conf to enable jupyter notebook server
#
#
# jupyter_enable (bool): Set to "NO" by default,
#                         Set it to "YES" to enable jupyter notebook server

. /etc/rc.subr

name=jupyter
command=/usr/local/bin/jupyter
rcvar=jupyter_enable

load_rc_config $name

jupyter_enable="${jupyter_enable-"NO"}" 
jupyter_user="${jupyter_user-"jupyter"}" 
jupyter_pidfile="${jupyter_pidfile:-"/var/run/jupyter/jupyter.pid"}"  

# /etc/rc.subr use $pidfile (not ${name}_pidfile)
pidfile="${jupyter_pidfile}" 

start_cmd="su - ${jupyter_user} -c '${command} notebook' &" 
stop_cmd="${name}_stop" 
status_cmd="${name}_status" 
getval_cmd="${name}_getval" 

jupyter_stop()
{
    jupyter_pid=$(pgrep -f "jupyter-notebook")

    echo "Stopping ${name}." 
    kill -s TERM "$(cat "${jupyter_pidfile}")" 

    echo "Stopping ${name}." 
    kill -s TERM "${jupyter_pid}" 

    rm ${jupyter_pidfile}
}

jupyter_status()
{
    # Try its best to find the service's status
    if [ -f "${jupyter_pidfile}" ]
    then
        jupyter_pid="$(cat "${jupyter_pidfile}")" 
    fi

    if [ -z "${jupyter_pid}" ]
    then
    jupyter_pid=$(pgrep -f "jupyter-notebook")
    [ -n "${jupyter_pid}" ] && echo "${jupyter_pid}" > "${jupyter_pidfile}" 
    fi

    if [ -n "${jupyter_pid}" ]
    then
        echo "${name} running with pid: $jupyter_pid" 
    else
        echo "${name} not running? (pid not found)" 
    fi
}

command_args=" >/dev/null 2>&1 &" 

load_rc_config $name
run_rc_command "$1" 

스크립트를 실행 파일로 만들어 주고

chmod a+x /usr/local/etc/rc.d/jupyter

Jial 부팅시 jupyter 가 자동실행 되도록 다음과 같이 하여 준다.

sysrc jupyter_enable=YES

jupyter를 실행하여 본다.

8. Python kernel 설치

pip install ipykernel
su - jupyter -c 'python3.8 -m ipykernel install --user'

이제 jupyter을 실행하여 보자.

service jupyter start

9. Reference.

  1. Install Jupyter Notebook on FreeBSD

답글 남기기