——by不是殺殺
Samba是在Linux和UNIX系統(tǒng)上實(shí)現(xiàn)SMB協(xié)議的一個(gè)免費(fèi)軟件,由服務(wù)器及客戶端程序構(gòu)成(來自百度百科),簡(jiǎn)單來說它可以實(shí)現(xiàn)服務(wù)器端(Linux)與Windows端之間的文件共享。而Jupyter Notebook是大家熟悉的交互式筆記本,我認(rèn)為是一個(gè)非常方便的開發(fā)工具。通過Samba將Jupyter的工作目錄設(shè)置為Windows可訪問的共享目錄,將大大提高工作效率。正如如下圖所示,可以在Windows中非常方便地讀取、上傳已經(jīng)修改Jupyter工作目錄下的文件。


一、Samba
其安裝及部署需要root權(quán)限
1. 準(zhǔn)備工作
### 關(guān)閉防火墻
systemctl stop firewalld.service
### 關(guān)閉SeLinux
#### 查看SeLinux狀態(tài)
sestatus
setenforce 0
sestatus
2. 安裝
### 安裝samba
yum install samba
### 查看安裝狀態(tài)
rpm -qa|grep samba
Samba服務(wù)器安裝完畢,會(huì)生成配置文件目錄/etc/samba,/etc/samba/smb.conf是samba的核心配置文件
### 查看SMB服務(wù)狀態(tài)
service smb status
### 啟動(dòng)SMB服務(wù)
systemctl start smb
### 設(shè)置開機(jī)自啟
systemctl enable smb
3. samba配置
cd /etc/samba/ ##切換到Samba配置文件目錄
mv smb.conf smb.conf.bak ##備份
grep -v "#" smb.conf.bak > smb.conf ##重新創(chuàng)建一個(gè)配置文件(除去注釋的)
vim smb.conf ##修改配置文件
[global] ##全局
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
map to guest = Bad User ##添加此項(xiàng),開啟匿名用戶訪問
[HLABshare] ##添加的share文件
path=/home/share ##路徑
public=yes ##公共訪問
browseable=yes ##能夠訪問
writable=yes ##寫權(quán)限
create mask=0644 ##設(shè)置權(quán)限
directory mask=0755
path=/home/share需要共享的目錄路徑
samba可以用testparm命令來測(cè)試smb.conf配置檔的合法性
mkdir /home/share ##創(chuàng)建目錄
chmod 755 /home/share ##設(shè)置權(quán)限
systemctl restart smb.service ##重啟Samba服務(wù)
修改文件創(chuàng)建的默認(rèn)權(quán)限
### 在[HLABshare]中加入以下配置
create mode = 0644
force create mode = 0644
directory mode = 0755
force directory mode = 0755
權(quán)限沖突問題
因?yàn)镴upyter是由A賬戶安裝的,因此會(huì)發(fā)現(xiàn)在share文件夾中通過Jupyter生成的文件其權(quán)限是屬于賬戶A的,而通過Samba訪問的Windows用戶在該文件夾下創(chuàng)建文件,由于配置文件中的map to guest = Bad User 設(shè)置,導(dǎo)致創(chuàng)建的文件是屬于nobody賬戶的,因此會(huì)出現(xiàn)權(quán)限沖突的問題,當(dāng)然這個(gè)問題如果嚴(yán)謹(jǐn)一些應(yīng)該通過為每個(gè)Windows客戶端訪問的人創(chuàng)建賬戶等方法來解決,但是我還是選擇了比較簡(jiǎn)單但是不夠安全的做法:(其他解決方法歡迎評(píng)論區(qū)留言)
## 在配置中加入
# 在 [global] 放入以下內(nèi)容
force user = 帳號(hào)
force group = 群組
其中賬號(hào)和群組與安裝Jupyter的賬號(hào)一致。
二、Jupyter
1. 安裝miniconda
# 創(chuàng)建一個(gè)目錄用于放miniconda安裝包
mkdir miniconda
# 下載miniconda
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh --no-check-certificate
# 安裝
bash Miniconda3-latest-Linux-x86_64.sh
# 有提示選擇輸入yes
# 安裝完之后需要重啟客戶端(把連接服務(wù)器的窗口關(guān)掉再打開)
# 換成清華源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
conda config --set show_channel_urls yes
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
2. 為jupyter創(chuàng)建一個(gè)conda的環(huán)境
# jupyter 是創(chuàng)建的環(huán)境名稱
conda create -n jupyter
# 激活(進(jìn)入)創(chuàng)建的環(huán)境
conda activate jupyter
# 退出當(dāng)前環(huán)境
conda deactivate
3. 安裝R內(nèi)核及jupyter
# 安裝R內(nèi)核
conda install r-recommended r-irkernel
# 安裝jupyter
conda install Jupyter
# 在R中連接jupyter
R -e 'IRkernel::installspec()'
4. 啟動(dòng)jupyter
# 指定IP和端口,其中IP為服務(wù)器的IP,端口為服務(wù)器開放的端口
jupyter notebook --no-browser --port 8888 --ip=172.16.0.xxx
以上運(yùn)行方式,當(dāng)斷開端口時(shí)jupyter會(huì)被殺死,因此平常采用如下運(yùn)行方式:
# 方法一:在tmux中啟動(dòng)
tmux
# 進(jìn)如不間斷連接的端口
conda activate jupyter
jupyter notebook /home/share --no-browser --port 8888 --ip=172.16.0.xxx
# 方法二:通過nohup &來后臺(tái)運(yùn)行
nohup jupyter notebook /home/share --no-browser --port 8888 --ip=172.16.0.xxx &
Jupyter的其他配置
修改jupyter密碼
# 生成jupyter配置文件
jupyter notebook --generate-config
# 將固定的密碼轉(zhuǎn)換成sha1加密
jupyter notebook password
# 兩次輸入要設(shè)置的密碼

將sha1寫到配置文件中
cat jupyter_notebook_config.json
# 復(fù)制password部分
# 修改配置文件
vim jupyter_notebook_config.py
# 在vim中搜索passwd
/password

將c.NotebookApp.password的注釋去掉,保存配置文件后重啟jupyter
指定工作目錄
這里指定為上一步Samba設(shè)置的共享目錄。
# 啟動(dòng)時(shí)指定目錄
jupyter notebook [dir] --no-browser --port 8888 --ip=172.16.0.xxx
#如
jupyter notebook /home/share --no-browser --port 8888 --ip=172.16.0.123