——by不是杀杀
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成(来自百度百科),简单来说它可以实现服务器端(Linux)与Windows端之间的文件共享。而Jupyter Notebook是大家熟悉的交互式笔记本,我认为是一个非常方便的开发工具。通过Samba将Jupyter的工作目录设置为Windows可访问的共享目录,将大大提高工作效率。正如如下图所示,可以在Windows中非常方便地读取、上传已经修改Jupyter工作目录下的文件。
一、Samba
其安装及部署需要root权限
1. 准备工作
### 关闭防火墙
systemctl stop firewalld.service
### 关闭SeLinux
#### 查看SeLinux状态
sestatus
setenforce 0
sestatus
2. 安装
### 安装samba
yum install samba
### 查看安装状态
rpm -qa|grep samba
Samba服务器安装完毕,会生成配置文件目录/etc/samba,/etc/samba/smb.conf是samba的核心配置文件
### 查看SMB服务状态
service smb status
### 启动SMB服务
systemctl start smb
### 设置开机自启
systemctl enable smb
3. samba配置
cd /etc/samba/ ##切换到Samba配置文件目录
mv smb.conf smb.conf.bak ##备份
grep -v "#" smb.conf.bak > smb.conf ##重新创建一个配置文件(除去注释的)
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 ##添加此项,开启匿名用户访问
[HLABshare] ##添加的share文件
path=/home/share ##路径
public=yes ##公共访问
browseable=yes ##能够访问
writable=yes ##写权限
create mask=0644 ##设置权限
directory mask=0755
path=/home/share需要共享的目录路径
samba可以用testparm命令来测试smb.conf配置档的合法性
mkdir /home/share ##创建目录
chmod 755 /home/share ##设置权限
systemctl restart smb.service ##重启Samba服务
修改文件创建的默认权限
### 在[HLABshare]中加入以下配置
create mode = 0644
force create mode = 0644
directory mode = 0755
force directory mode = 0755
权限冲突问题
因为Jupyter是由A账户安装的,因此会发现在share文件夹中通过Jupyter生成的文件其权限是属于账户A的,而通过Samba访问的Windows用户在该文件夹下创建文件,由于配置文件中的map to guest = Bad User 设置,导致创建的文件是属于nobody账户的,因此会出现权限冲突的问题,当然这个问题如果严谨一些应该通过为每个Windows客户端访问的人创建账户等方法来解决,但是我还是选择了比较简单但是不够安全的做法:(其他解决方法欢迎评论区留言)
## 在配置中加入
# 在 [global] 放入以下内容
force user = 帐号
force group = 群组
其中账号和群组与安装Jupyter的账号一致。
二、Jupyter
1. 安装miniconda
# 创建一个目录用于放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
# 安装完之后需要重启客户端(把连接服务器的窗口关掉再打开)
# 换成清华源
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创建一个conda的环境
# jupyter 是创建的环境名称
conda create -n jupyter
# 激活(进入)创建的环境
conda activate jupyter
# 退出当前环境
conda deactivate
3. 安装R内核及jupyter
# 安装R内核
conda install r-recommended r-irkernel
# 安装jupyter
conda install Jupyter
# 在R中连接jupyter
R -e 'IRkernel::installspec()'
4. 启动jupyter
# 指定IP和端口,其中IP为服务器的IP,端口为服务器开放的端口
jupyter notebook --no-browser --port 8888 --ip=172.16.0.xxx
以上运行方式,当断开端口时jupyter会被杀死,因此平常采用如下运行方式:
# 方法一:在tmux中启动
tmux
# 进如不间断连接的端口
conda activate jupyter
jupyter notebook /home/share --no-browser --port 8888 --ip=172.16.0.xxx
# 方法二:通过nohup &来后台运行
nohup jupyter notebook /home/share --no-browser --port 8888 --ip=172.16.0.xxx &
Jupyter的其他配置
修改jupyter密码
# 生成jupyter配置文件
jupyter notebook --generate-config
# 将固定的密码转换成sha1加密
jupyter notebook password
# 两次输入要设置的密码
将sha1写到配置文件中
cat jupyter_notebook_config.json
# 复制password部分
# 修改配置文件
vim jupyter_notebook_config.py
# 在vim中搜索passwd
/password
将c.NotebookApp.password的注释去掉,保存配置文件后重启jupyter
指定工作目录
这里指定为上一步Samba设置的共享目录。
# 启动时指定目录
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