Ubuntu 的安装与配置

1 UEFI 下安装 Ubuntu

挂载点 说明
efi boot partition 256MB
/ 30GB左右
swap 大约内存2倍大小
/home 剩余空间

注意:对于安装 Windows 和 Ubuntu 双系统,由于安装了 Windows 系统后而有 efi 分区了,因此在安装 ubuntu 的时候就不需要再建立 efi 分区了。

关于在 UEFI 下安装 win8 和 ubuntu 双系统的一些细节,可参考:UEFI模式下安装win8和ubuntu双系统。也可参考我后来写的文章:安装 Ubuntu 16.04 和 Win10 双系统

安装完成后,可执行如下命令查看 Ubuntu 版本(事实上,其中的内容是用户登录时打印出的系统信息): cat /etc/issue

2 开启防火墙并默认为 allow

sudo ufw enable sudo ufw default allow

ufw 命令和 iptables 命令均是用来管理同一个防火墙列表的。只不过前者在设置上比较简单方便,适合一般用户;而后者设置比较复杂,适合于专业级用户。

3 更新源指定的可用包列表以及更新已经安装的包

更新源指定的可用包列表: sudo apt-get update

如果因为依赖关系的问题导致更新失败,则可以用如下命令自动修复依赖关系: sudo apt-get -f install -f 表示修复。

更新已经安装的包: sudo apt-get dist-upgrade

4 配置终端

进入 colors

对于 Text and Background Color

  • 取消 Use colors from system theme
  • Built-in schemes 中选择 Solarized dark
  • 然后在 Text color 中选择 #FFFFFF
  • 取消 Same as text color
  • Bold color 中选择 #FF0000
  • 选择 Use transparent background,并调整透明度。

对于 Palette

  • Built-in schemes 中选择 XTerm
  • Palette entry 11 中选择 #FC8900
  • Palette entry 13 中选择 #00E4FF

5 安装 Linuxbrew

类似于 MacOS 中的 brew 工具。

官网 进行下载安装(推荐安装到 /home 目录下)。

如果要卸载 homebrew,可以先卸载掉所有通过 homebrew 安装的 app,然后参考官方文章:FAQ

然后添加环境变量到 ~/.zshrc 中:

1
2
3
export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"
export MANPATH="/home/linuxbrew/.linuxbrew/share/man:$MANPATH"
export INFOPATH="/home/linuxbrew/.linuxbrew/share/info:$INFOPATH"

添加到 plugins=(xxx) 之前,否则 oh-my-zsh 找不到指定的各个插件。

然后使用 sudo visudo 编辑 sudo 配置文件,将 /home/linuxbrew/.linuxbrew/bin 添加至 secure_path 中(因为只能用 sudo 执行 secure_path 指定路径下的命令)。

homebrew 常用操作:

  • 查看版本: brew -v
  • 用 brew 安装某个软件 brew install package

    用 brew 安装,卸载等其他所有操作时,不需要在前面加上 sudo 命令。 另外,用 brew 成功安装某个软件后,需要退出终端,然后再打开,这时就可以应用最新版的软件了。

  • 卸载用 brew 安装的软件 brew uninstall package --force
  • 列出用 brew 安装的所有软件 brew list
  • 列出所有安装的软件里可以升级的那些软件 brew outdated
  • 更新 Homebrew brew update
  • 更新指定的软件 brew upgrade xxx
  • 更新所有可更新的软件 brew upgrade --all
  • 清理不需要的版本极其安装包缓存 brew cleanup
  • brew 检测 brew doctor
  • 安装 tap: brew tap tap名
  • 显示所有安装的 taps: brew tap

有时候需要翻墙才能更新 homebrew 或者下载程序。由于 homebrew 支持 socks 代理,因此可以先开启 shadowsocks 客户端(见后面),然后执行: export ALL_PROXY=socks5://127.0.0.1:1080 其中,ALL_PROXY 是 sock 代理相关的环境变量。此后再进行操作即可。

或者也可以使用 proxychains-ng 工具。

6 安装及配置 Git

安装 git: sudo apt-get install git

配置用户信息: git config --global user.name "you name" git config --global user.email "you email" git config --global core.editor "vim"

查看 git 配置: git config --list

为 git log 配置参数并添加别名: git config --global alias.lg "git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

7 安装及配置 Vim

安装 vim: sudo apt-get install vim-nox

vim-nox 除了包含最基本的 vim 外,还提供了 lua, ruby 等支持(vim 的一些插件需要用到)。

若用 linuxbrew 工具安装: brew install vim --with-lua --with-python3

安装完成后,使用 SpaceVim 配置 Vim: curl -sLf https://spacevim.org/install.sh | bash -s -- --install vim

SpaceVim 需要安装一些额外的字体才能让状态栏正常显示。假设这里安装 DejaVuSansMono 字体: 先到 https://nerdfonts.com/ 上下载 DejaVuSansMono.zip 文件,解压后运行 DejaVu Sans Mono for Powerline Nerd Font Complete.ttf 字体文件即可。 安装完成后,在终端中的 Profile Preferences 里勾选 Custom font,并选中该字体。

SpaceVim 安装完成后,可以在 ~/.SpaceVim.d/init.vim 中进行自定义。

然后设置 Vim 为终端下的默认编辑器: sudo update-alternatives --config editor 然后选择 /usr/bin/vim.nox 即可。

若使用 linuxbrew 安装的 vim,则执行如下命令: sudo update-alternatives --install /usr/bin/editor editor /home/linuxbrew/.linuxbrew/bin/vim 40 --slave /usr/share/man/man1/editor.1.gz editor.1.gz /home/linuxbrew/.linuxbrew/share/man/man1/vim.1 sudo update-alternatives --config editor 选择相应 vim 即可。

另外,可以通过如下命令更新 SpaceVim: :SPUpdate SpaceVim

8 配置 Oh My Zsh

oh-my-zsh 基于 zsh,因此首先需要安装 zsh: sudo apt-get install zsh 或者是用 brew 安装: brew install zsh

若是通过 brew 安装的 zsh,还需要将安装的 zsh 所在路径(假设是 /home/linuxbrew/.linuxbrew/bin/zsh)添加至 /etc/shells 末尾。

设置 zsh 为默认的 shell(-s 表示修改当前用户的 登录shell): chsh -s zsh所在路径

设置完后重启生效: sudo reboot

然后访问官网根据提示安装 oh my zsh。安装完成后重启终端,即可看到变化。

然后配置 .zshrc。主要包含如下几个基本项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ZSH_THEME="muse"
plugins=(git)

# 指定所有 locale 类别的字符集.
export LC_ALL=en_US.UTF-8

export GREP_COLOR="1;31"
alias grep="grep --color=always"
alias egrep="grep --color=always"

export LSCOLORS="Gxfxcxdxdxegedabagacad"
alias ls="ls -G"

# 删除时打印提示信息
alias rm="rm -i"

9 安装配置 Tmux

安装 Tmux: sudo apt-get install tmux

若用 linuxbrew 工具安装: brew install tmux

配置 Tmux: cd && git clone https://github.com/gpakosz/.tmux.git ln -s -f .tmux/.tmux.conf && cp .tmux/.tmux.conf.local .

编辑 ~/.tmux.conf.local,在末尾添加:

1
2
3
4
5
6
7
set -g status-keys vi
set -g mode-keys vi

unbind C-b
unbind C-a
set -g prefix C-g
bind C-g send-prefix

10 配置 SSH 服务器

判断是否安装ssh服务,可以通过如下命令进行: ssh localhost

如还没安装ssh,则可以通过apt安装,命令如下: sudo apt-get install openssh-server

安装完成以后,先启动服务: sudo service ssh start

手动启动后,默认开机自启动。

可以通过如下命令查看: ps -e|grep ssh

如果存在这个进程,则表明 SSH 服务已经启动。

11 用 SSH 登录远程主机

登录: ssh username@remoteIP username 为远程端的用户名,remoteIP 为远程端的 IP 地址。

然后根据提示,输入远端主机 username 对应的密码。

断开连接: ctr + D

上面的是用密码进行登录,这种登录方式不安全(中间人攻击)。现在一般都采用 公钥登录(也即免密码登录)。其原理详见:SSH连接认证原理概述ssh 公钥方式认证攻略

如果要通过公钥进行免密钥登陆,之前需要进行一定的配置。步骤如下:

  • 首先,要在用户主机本地生成一个 RSA类型 的密钥。 ssh-keygen -t rsa -C "youremail@example.com" 其中,-t 指定密钥类型,-C 表示对此密钥添加一个新的说明。执行此命令之后,会在用户主目录下生成一个 .ssh 子目录,里面有两个文件,为 id_rsaid_rsa.pub。其中,id_rsa 为私钥,不能泄漏出去,而 id_rsa.pub 为公钥,可以放心地告诉任何人。
  • 执行如下命令将 id_rsa.pub 中的内容追加到指定远程主机里指定用户目录下的 ~/.ssh/authorized_keys 中: ssh-copy-id -i ~/.ssh/id_rsa.pub username@remoteIP
  • 更改远端 .ssh 目录以及 authorized_keys 和 id_rsa 文件的文件模式字段。 chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub chmod 644 ~/.ssh/known_hosts

之后,从本地主机再次通过 ssh username@remoteIP 登陆时,便不需要输入密码了。

如果觉得这样还是很麻烦,可以在执行上面的操作后,进行如下配置。

  • 在本地主机的 ~/.ssh 目录里新建一个名为 config 的文件,然后在里面添加如下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    // HostAlias 为随自己喜好定义的远程主机别名
    Host HostAlias
    // remoteIP 为远程主机 IP
    HostName remoteIP
    // remotePort 为远程端口号
    Port remotePort
    // remoteUsername 为远程主机的用户名
    User remoteUsername
  • 修改 config 文件的模式字段。 chmod 644 ~/.ssh/config

之后,在本地用 ssh 登陆远程主机时,直接执行如下命令即可: ssh HostAlias

注意:如果本地是中文 OS,远程主机是其他语言的OS,则登陆到远端主机时,可能会提示 locale 错误。需要进行如下设置: 打开 /etc/default/locale 文件,然后更改 LANG 为想修改的字符编码(比如 zh-CN.UTF-8)。

如果是在 Windows 上的 vmware 中安装的 Ubuntu 虚拟机,一般情况下,若上网方式设置为 NAT 后,物理主机和虚拟主机之间是可以互相 ping 通的。不过 NAT 默认使用 DHCP 分配虚拟主机的 IP 地址,一旦重启或者其他情况导致 IP 地址变更后,会对一些有关依赖于虚拟主机 IP 的服务造成影响。因此,需要将其设置为固定 IP。

  • 打开 vmware 的虚拟网络编辑器,然后点击 VMnet8,然后查看 NAT 设置,记住子网掩码以及网关地址。然后查看 DHCP 设置,根据起始 IP 地址和结束 IP 地址,自己确定一个属于这个范围内的 IP 地址。
  • 然后进入 Ubuntu 系统,点击右上角的网络编辑 -> IPv4,将第一个选为 manual,然后添加或更改,将上面记录的 ip 地址,子网掩码,网管地址填入其中,保存退出。然后点击右上角的断网功能,然后再打开即可。

NAT 只适合内网之间进行通信。如果要从外网访问 Ubuntu 虚拟主机,还需要添加端口转换。具体详见:VMware NAT端口映射外网访问虚拟机linux

12 安装 OpenVPN

sudo apt-get install openvpn

使用方式: sudo openvpn .ovpn配置路径所在路径

13 安装 Python3 及 Pip

ubuntu 系统自带 Python3,而且现在更新基本与官方保持一致,因此可以不用再手动安装。然后执行如下命令安装 Python3 的静态库和头文件,以及 Pip: sudo apt-get install python3-dev python3-pip

若用 linuxbrew 工具安装(会自动安装 pip): brew install python3

如果要通过手动安装,且以编译源码的方式,则采取如下步骤。

  • 首先安装依赖的包,然后再进行其他编译源文件操作。 sudo apt-get install libssl-dev
  • 先从官网下载 python3 最新版的源码,并解压 tar -xzvf ~/Downloads/python-3.x.x.tgz -C ~/Downloads/
  • 然后进入解压出来的目录 cd ~/Downloads/python-3.x.x
  • 执行配置文件 ./configure --prefix=/usr/local --enable-shared

    注意:其中的 --prefix 指定 Python3 的安装目录,--enable-shared 表示生成共享库。Python3 共享库在安装其他依赖于它的包的时候非常关键。 对于其他参数选项,可以通过执行 ./configure --help 来查询。

  • 编译源码,在源码包中链接生成动态库以及可执行程序。 make -j4
  • 将生成好的库以及可执行程序等文件安装到指定的安装目录。 sudo make install

    除了会安装 python3,一般情况下还会自动安装 pip3。

    如果未自动安装 pip3,则可以执行如下命令: sudo python3 -m ensurepip

  • 由于 /etc/ld.so.conf.d 中存在包含 /usr/local/lib 的文件(比如 libc.conf),因此无需再添加新的文件,直接执行: sudo ldconfig
  • 查看 python3 版本 python3 --version
  • 查看 pip 版本 python3 -m pip --version

安装好 pip 后,即可使用 pip 来管理 python 包了。pip 的常用操作如下:

  • 安装某个包及其依赖的包(如果该包已经被安装,则不执行任何操作): sudo python3 -m pip install package_name 这里的 -m 选项用于指明模块名。
  • 卸载某个包: sudo python3 -m pip uninstall package_name
  • 更新某个包(如果该包已经被安装,则升级该包及其所有依赖的包): sudo python3 -m pip install --U package_name
  • 列出安装的所有包 sudo python3 -m pip list
  • 列出某个包安装后的目录,以及目录中的内容: sudo python3 -m pip show --files package_name

若用 brew 安装的 python3,则无需 sudo。

14 安装 Python3 的相关包

若用 brew 安装的 python3,则无需 sudo。

安装 numpy: sudo python3 -m pip install -U numpy

安装 scipy: sudo python3 -m pip install -U scipy

注:在安装 scipy 时,可能安装出错。如果出错原因是找不到 xxx 库,输入以下命令进行安装: sudo apt-get install gfortran libatlas-base-dev

安装 matplotlib: sudo python3 -m pip install -U matplotlib

注:如果安装出错,可能需要事先安装它的依赖库。 sudo apt-get install libpng12-dev libfreetype6-dev

安装 scikit-learn: sudo python3 -m pip install -U scikit-learn

安装 scikit-image: sudo python3 -m pip install -U scikit-image

注:如果安装出错,可能需要事先安装它的依赖库。 sudo apt-get install libjpeg8-dev

安装 scrapy: sudo python3 -m pip install -U scrapy

注:如果安装出错,可能需要事先安装它的依赖库: sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev

15 安装 TexLive 及中文的解决方法

通过 apt-get 安装得到的 latex 版本比较旧。这里通过访问 镜像站点 下载 texlive-xxx.iso 文件。

  • 然后安装 perl-tk,这个在后边需要用到。 sudo apt-get install perl-tk
  • 接着挂在 iso 文件 sudo mount -o loop texlive2014.iso /mnt/
  • 进入 mnt 目录并以图形界面运行安装程序 cd /mnt sudo ./intall-tl --gui
  • 修改 Create symlinks in system directoriesYES 然后开始安装。
  • 安装结束后,卸载镜像。 sudo umount /mnt/
  • 接下来进行环境的配置。打开 ~/.zshrc 文件(因为我用的是 zsh)在末尾加上: export MANPATH=${MANPATH}:/usr/local/texlive/2014/texmf-dist/doc/man export INFOPATH=${INFOPATH}:/usr/local/texlive/2014/texmf-dist/doc/info export PATH=${PATH}:/usr/local/texlive/2014/bin/x86_64-linux

    然后应用改变 source ~/.zshrc
  • 查看 latex 版本 latex -version

接下来安装中文字体。近年来 xetex 大有赶超 latex 之势,而解决中文问题,用 xetex 就是解决方法之一,因为它可以直接使用系统中的字体,因此我这里就用这种方法。事实上 texlive 中已经包含了 CJK,只是 Ubuntu 中没有一般用到的宋体,楷体等。因此,需要先从网上或其他地方找到 Windows 系统中的 fonts 文件夹。然后:

  • 新建WinFonts目录 sudo mkdir /usr/share/fonts/WinFonts

    进入该目录 cd /usr/share/fonts/WinFonts

    并将fonts中的宋体(simsun.ttc),楷体(simkai.ttf),仿宋(simfang.ttf),黑体(simhei.ttf),新宋(simsunb.ttf),拷贝到WinFonts目录下。然后执行: sudo chmod 744 * sudo mkfontscale sudo mkfontdir sudo fc-cache -fv
  • 查看刚刚安装到系统的中文字体。 fc-list :lang=zh-cn

    大致为:

    1
    2
    3
    /usr/share/fonts/WinFonts/simsun.ttc: SimSun,宋体 :style=Regular
    /usr/share/fons/WinFonts/simkai.ttf: KaiTi,楷体 :style=Regular
    ...

以后在使用 xelatex 中要使用字体时,它们对应的名字就为 SimSun 或者 宋体,正如上面一样。其他类似。

常用简单模版如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{SimSun}
\begin{document}

\setmainfont{SimSun}
\title{pdf title}
\author{you name}
\date{\today}
\maketitle

\section{pdf section1}
\subsection{pdf subsection1.1}

\begin{itemize}
\item[-] hello world
\end{itemize}

\section{pdf section2}
\subsection{pdf subsectino2.1}

\begin{itemize}
\item[-] my first tex
\end{itemize}

\end{document}

至此,latex 环境已搭建好了。编辑器的话有很多,我用的 atom。

16 安装与配置 JDK

jdk官网 下载合适版本的 jdk 安装包。

  • 新建目录: sudo mkdir /usr/local/lib/jvm

  • 解压 jdk 安装包并将 jdk1.xxx 目录存放到 /usr/lib/jvm/ 中: sudo tar -xzvf jdk-xxxx.tar.gz -C /usr/local/lib/jvm/

  • 添加环境变量(由于我用的是 zsh,因此添加到 .zshrc 中):

    1
    2
    3
    4
    5
    export JAVA_HOME=/usr/local/lib/jvm/jdk1.xxx
    # 自 jdk1.5 开始,在编译或运行时会自动搜索 jdk 目录下的类文件或 jar 包,不需要 CLASSPATH 这个环境变量或者通过 -cp 指定了。而且在项目中尽量少依赖于 CLASSPATH,避免名字冲突。故这里不再设定 CLASSPATH。
    # export JRE_HOME=${JAVA_HOME}/jre
    # export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH

    应用改变: source ~/.zshrc

  • 查看java版本 java -version

若用 linuxbrew 工具安装: brew cask install java

17 安装与配置 Maven 与 Tomcat

从官网下载并解压到某个目录下 (这里假设为 /home/username/Programs)。

然后在 .zshrc 中添加如下:

1
2
3
4
5
6
7
8
# MAVEN ENV
export M2_HOME="/home/username/Programs/maven"
export PATH=${M2_HOME}/bin:$PATH

# TOMCAT ENV
export CATALINA_HOME="/home/cuckootan/Programs/tomcat"
export PATH=${CATALINA_HOME}/bin:$PATH
export CATALINA_OPTS="-server -Xms528m -Xmx528m -XX:PermSize=256m -XX:MaxPermSize=358m"

18 安装 Eclipse

Eclipse官网 下载合适版本的 eclipse 安装包。

  • 解压并将解压得到的 eclipse 目录存放到 /home/cuckootan/Software 中 tar -xzvf eclipse-java-xxx.tar.gz -C /home/cuckootan/Software/
  • 然后,创建桌面快捷方式。

    新建一个桌面快捷方式文件 sudo vim /usr/share/applications/eclipse.desktop 添加下面的字段

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [Desktop Entry] 

    Name=Eclipse
    Comment=Eclipse SDK
    Encoding=UTF-8
    Exec=/home/cuckootan/Software/eclipse/eclipse
    Icon=/home/cuckootan/Software/eclipse/icon.xpm
    Terminal=false
    Type=Application
    Categories=Application;Development
    然后即可搜索到 eclipse,就可以将起拖进菜单栏了。
  • 运行它之后,会提示在 eclipse 的目录下没有找到 jre。此时,需要在指定位置建立一个符号链接。

    1
    2
    3
    mkdir /home/cuckootan/Software/eclipse/jre
    cd /home/cuckootan/Software/eclipse/jre
    ln -s /usr/lib/jvm/java/bin bin

    此时就可以成功运行eclipse了。

19 安装 Jetbrain 系列

包括 IntelliJ IDEA(用于 java 开发),Pycharm(用于 python 开发),Clion(用于 C++ 开发)。

它们的安装方式类似,下面以安装 Pycharm 为例。

  • 首先到官网下载 Pycharm for Linux 的安装包。
  • 然后解压,将里面的目录提取出来放到一个合适的位置。比如:/home/username/Program 下。
  • 然后在终端中操作。

    切换至 Pycharm 中的 bin 目录: cd /home/username/Program/Pycharm-xxx/bin

    执行里面的运行脚本: ./pycharm.sh

    接下来会出现一些初次打开应用程序的提示。然后选择: Create Desktop Entry 创建菜单项。

    菜单项一般有两个保存位置。第一个是: /usr/share/appplications 第二个是: ~/.local/share/applications 选择上面的选项后,Pycharm 的菜单项一般会保存到后者这个目录下面。

20 安装 shadowsocks 客户端

https://github.com/shadowsocks/shadowsocks-qt5 提供了 GUI 形式的客户端。安装方法见:安装指南

还可以使用 python 脚本: sudo python3 -m pip install -U shadowsocks

21 搭建 FTP/FTPS 服务器

安装 vsftpd: sudo apt-get install vsftpd

配置 vsftp:

  • 建立 ftp 账号 myftp: sudo useradd -d /home/myftp -s /usr/sbin/nologin myftp

    其中,-d 指定登录成功后的初始工作目录。-s 用来指定 登录shell,/usr/sbin/nologin 表示不会使用任何 bash 等 登录shell。

    如果 /usr/sbin/nologin 没有加入到 /etc/shells 中,将其加入(直接将 /usr/sbin/nologin 这个字符串加到文件末尾)。

  • 修改 myftp 密码: sudo passwd myftp
  • 建立 myftp 的主目录 sudo mkdir /home/myftp
  • 配置 /etc/vsftpd.conf

    如果不允许匿名访问,则设置: anonymous_enable=NO

    另外,在 ftp 客户端需要登录 ftp 服务器所在主机的账号才能够访问所有的目录,以及上传文件到 ftp 服务器中。因此,有如下设置: local_enable=YES write_enable=YES

    ftp 服务的文件模式创建屏蔽字默认为 077。如果想修改 ftp 服务的文件模式创建屏蔽字,可以同下面的方式修改: local_umask=002

    为了确保传输安全性,使用 ssl/tls(使用 ssl 的 FTP 服务器就是 FTPS 服务器): ssl_enable=YES

    设定 myftp 的根目录,也即限制 myftp 到初始工作目录及其子目录中,则如下设置: chroot_local_user=YES

    如果要指定某几个用户不受此限制,那么设定: chroot_list_enable=YES 然后在 chroot_list_file=/etc/vsftpd.chroot_list 中添加例外用户名。

  • 启动 ftp 服务(手动启动后,ftp 默认设置为开机自启动) sudo service vsftpd start

    停止 ftp 服务 sudo service vsftpd stop

    重启 ftp 服务 sudo service vsftpd restart

当用 myftp 账号登录服务器时,相当于是建立了一个 有效用户为 myftp,有效用户组为 myftp 的进程。然后该进程读服务器上的文件给客户端,或者将客户端传过来的文件写入到服务器。

若是将从服务器上读取的文件写入到客户端,会使用客户端进程的文件模式创建屏蔽字,以及客户端进程的 有效用户ID 和 有效用户组ID。若是将客户端传过来的文件写入到服务器,会使用服务器端进程的文件模式创建屏蔽字,以及服务端的 有效用户ID 和 有效用户组ID。

详见:

22 搭建 SFTP 服务器

FTP/FTPS 服务器的有一个弊端在于,当它们出于 NAT 环境(比如路由器下面)时,需要采用被动模式,而设置被动模式比较复杂。

SFTP 是基于 SSH 的一种协议,安全性好,而且与 SSH 一样,在 NAT 中的设置不复杂。

  • 建立一个 mysftp(下面所要添加的用户)用于进行 sftp 的根目录: sudo mkdir /home/mysftp

    确保这个目录及其到根目录间这条路径上的所有目录的用户为 root(用户组不受限制)。且只有 root 对它们具有写权限,其他用户均没有,也即文件模式字段中只有第一个字段有 w,后面两个没有 w。
  • 建立用于 sftp 户及用户组: sudo useradd -d /home/mysftp -s /usr/sbin/nologin -G admin_group mysftp 会自动建立 mysftp 用户组。将 mysftp 加入到安装系统时指定的用户 admin 的主组 admin_group 中,使该组称为 mysftp 的附加组,这样方便 mysftp 对所属用户组为 admin_group 文件的读写(当然,还需要这个文件所属组能够对该文件读写才可以)。
  • 由于 mysftp 只有 root 可以写,因此需要再其中建立一个用于 mysftp 写的目录: sudo mkdir share

    然后将其所属用户和所属组变为 mysftp: sudo chown mysftp:mysftp share
  • 打开 /etc/ssh/sshd_configsudo vim /etc/ssh/sshd_config

    注释掉 Subsystem sftp /usr/lib/openssh/sftp-server 变为: # Subsystem sftp /usr/lib/openssh/sftp-server

    然后在文件末尾添加如下字段:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 表示使用 sftp 服务使用系统自带的 internal-sftp。sftp 默认的创建文件模式屏蔽字使用系统的,如果想要指定 sftp 服务的文件模式创建屏蔽字,可以通过 -u 参数指定。比如 -u 0022
    Subsystem sftp internal-sftp
    # 用于匹配用户,多个用户名之间是用逗号分割。相当于一个条件从句,满足这个条件的用户执行后面的语句,直至碰到下一个 Match 语句或者到达文件尾。
    # 这里也可以使用 Match Group mysftp,表示主组或附加组为 sftp 的用户。
    Match User mysftp
    # 如果不使用端口转发,则置为 no。
    X11Forwarding no
    # 同上。
    AllowTcpForwarding no
    # 指定 sftp 命令
    ForceCommand internal-sftp
    # 指定根目录。如果不指定,则根目录为系统根目录。%h 表示初始工作目录,也可以指定为其他目录。
    ChrootDirectory %h
  • 重启 ssh 服务: sudo service ssh restart

23 搭建 Samba 服务器

  • 首先,安装 samba: sudo apt-get install samba
  • 然后为 samba 创建一个帐号: sudo useradd -d /home/username/Share -s /usr/sbin/nologin -G admin_group mysamba

    默认情况下,创建一个帐号的同时,还会创建一个同名的用户组 mysamba。另外,该账号只是用来登录 samba,不会用来登录主机,因此 登录shell 设置为 /usr/sbin/nologin。Share 目录用于进行分享。将 mysamba 加入到安装系统时指定的用户 admin 的主组 admin_group 中,使该组成为 mysamba 的附加组,这样方便 mysamba 对所属用户组为 admin_group 文件的读写(当然,还需要这个文件所属组能够对该文件读写才可以)。

    然后,将该用户置入 samba 的用户名系统之中: sudo smbpasswd -a mysamba

    其中,-a 表示追加用户名,-x 表示删除用户名。

    如果要查看 mysamba 中的所有用户名,可以执行: sudo pdbedit -L
  • 创建一个目录(假设该目录位于 /home/username 目录下),该目录用于共享文件: mkdir /home/username/Share
  • 配置 samba。打开其配置文件: sudo vim /etc/samba/smb.conf

    然后在 [global] 里添加以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 下面的模式字中的每位与系统的 umask 中的每位的意义正好相反。
    # 与用户的模式字相与。
    create umask = 0000
    # 与用户的模式字相或。
    force create mode = 0664
    # 与用户的模式字相与。
    directory mask = 0000
    # 与用户的模式字相或。
    force directory mode = 0775

    然后在末尾加上以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [Share]
    # 共享目录的路径。
    path = /home/cuckootan/Share
    browseable = yes
    # yes 表示只读,no 表示除了可以读,还可以写。
    read only = no
    # 除了有效用户外,是否允许其它用户访问。
    guest ok = no
    # 指定访问该目录的有效用户。
    valid users = mysamba
  • 重启 samba 服务: sudo service smbd restart

当用 mysamba 账号登录服务器时,相当于是建立了一个 有效用户为 mysamba,有效用户组为 mysamba 的进程。然后该进程读服务器上的文件给客户端,或者将客户端传过来的文件写入到服务器。

详见:NAS应用-Ubuntu 16.04 Samba文件共享

还有一种方式是,当安装好 samba 后,直接右键想要共享的目录或文件,然后点击 local network share,然后在根据选项进行配置即可。

需要注意的是,如果用这种方法,那么一定要保证用 mysamba 用户登录的 samba 服务对这个共享的目录或文件具有相应的操作权限。一般情况下,如果想让 mysamba 用户登录的 samba 服务对文件所在组为 username 的目录或文件具有和 username 一样的权限,可以将 mysamba 加入到 username 组中: sudo usermod -a -G username mysamba

详见:Use Ubuntu’s Public Folder to Easily Share Files Between Computers

要在 Windows 上访问共享文件,可以在 Windows 系统的 运行框里 输入: \\xxx.xxx.xxx.xxx。 其中,\\ 后面跟着的是 Samba 服务器的 IP 地址。然后根据提示输入用户名或密码即可。

要在 Mac OS 上访问共享文件,可以在 Finder 中选择菜单上的 前往,然后 连接服务器,然后输入: smb://xxx.xxx.xxx.xxx 其中,// 后面跟的是 Samba 服务器的 IP 地址。然后根据提示输入用户名或密码即可。

24 安装搜狗中文输入法

  • 进入系统设置,然后点击 Language Support,将 Keyboard input method system 设置为 fcitx
  • 官网下载,然后直接双击安装。完成后重启。
  • 启动进入桌面后,点击右上角的键盘图标-配置-添加-搜索 sogou,找到后点击确定。

有时候会碰到搜狗输入法只有输入框但打不出来汉字的情况。此时,先执行: rm -rf ~/.config/SogouPY* rm -rf ~/.config/sogou*

然后点击桌面右上角的键盘图标,选中 restart 即可。

25 安装支持 exfat 的包

由于 MacOS 不支持 ntfs,而 fat 无法存储大文件的原因,因而我的 u 盘和移动硬盘都是 exfat 格式。但 Ubuntu 默认不支持 exfat 格式,因而需要装 exfat 相应的包: sudo apt-get install exfat-utils

26 安装 rar 解压工具包

sudo apt-get install rar

27 安装 VNware Workstation Pro

首先到官网进行下载。假设其本地存放路径为 ~/Downloads/VMware-Workstation-xxx.bundle

然后对其添加执行权限: cd ~/Downloads/VMware-Workstation-xxx.bundle chmod +x VMware-Workstation-xxx.bundle

如果使用 root 立即执行该文件,则可能会产生无法找到某些模块的错误。

对于无法找到 libcanberra-gtk-module.so 错误,需先执行如下命令: locate libcanberra-gtk-module.so 找到 gtk-2.0 对应模块的位置。这里假设其为 /usr/lib/x86_64-linux-gnu/gtk-2.0/modules/libcanberra-gtk-module.so。然后在 /etc/ld.so.conf.d 下新建一个文件,命名为 gtk-2.0.conf,并将上述地址添加至其中。保存并退出后执行: sudo ldconfig

对于无法找到 murrine 错误,可忽略。

最后执行 VMware Workstation 安装程序: cd ~/Downloads/VMware-Workstation-xxx.bundle sudo ./VMware-Workstation-xxx.bundle

由于 Ubuntu 并不会自动安装显卡驱动,使得虚拟机上的系统无法支持 OpenGL (一个典型的例子是,虚拟机中的 Windows 系统无法开启玻璃效果)。此时,需要安装 Ubuntu 上的显卡驱动。如果是 Intel 显卡,则直接到 官网 进行下载安装。

然后执行如下命令: sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev mesa-utils

最后在 ~/.vmware/preferences 中添加: mks.gl.allowBlacklistedDrivers = "TRUE"

28 搭建 MySQL 服务器

  • 安装 mysql(包括服务端和客户端): sudo apt-get install mysql-server 在安装过程中,会提示输入 root 用户密码。
  • 安装完成后,用 root 用户登录 mysql: mysql -u root -p 会提示输入密码。

    进入后,创建新用户: CREATE USER "username"@"%" IDENTIFIED BY 'password'; % 是一个通配符,表示任意主机,也即让该用户从任意主机上连接到该数据库(包括服务器所在主机)。

    为创建的用户赋予权限: GRANT ALL PRIVILEGES ON *.* TO "username"@"localhost";
  • 配置 mysql。 打开配置文件: sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 注释掉 bind-address 这句。
  • 重新启动 mysql 服务: sudo service mysql restart
  • 安装驱动。mysql 官网提供了不同语言的 API(也就是所谓的 mysql 驱动)。如果要安装 python3 的驱动,直接到 mysql 官网下载 connector for python3,双击安装即可。不过对于 python 编程环境 mysql-connector-python3 对于某些情况支持得不是太好,因此一般情况下使用 pymysql 驱动,安装方式如下: sudo python3 -m pip install -U PyMySQL

如果只安装 mysql 客户端,则执行如下命令: sudo apt-get install mysql-client

29 搭建 PostgreSQL 服务器

  • 安装 postgresql: sudo apt-get install postgresql
  • 配置 postgresql。 打开权限配置文件 pg_hba.conf: sudo vim /etc/postgresql/9.5/main/pg_hba.conf 找到 # IPv4 local connections,在后面添加如下字段: host all all 114.212.80.0/21 md5 其中,114.212.80.0/21 是一个网段。这条记录表示允许通过 114.212.80.0/21 这个网段里的所有主机登录所有账号访问到所有的数据库。

    然后打开连接配置文件 postgresql.conf: sudo vim /etc/postgresql/9.5/main/postgresql.conf 找到 # listen_address = 'localhost',取消注释,并将其设置为: listen_address = '*'
  • 安装驱动。我这里安装 python 的驱动。 首先安装依赖: sudo apt-get install libpq-dev

    然后安装驱动: python3 -m pip install -U psycopg2

30 搭建 Redis 服务器

sudo apt-get install redis-server

默认情况下,只监听本地连接。若要监听远程连接,则编辑: sudo vim /etc/redis/redis-conf 将 bind 一行注释掉。

31 搭建 Graphite 服务器

通过该服务器,可以用图形界面的方式监控其他主机上的应用程序运行情况,这在很多较大的项目中是非常方便的。

不过,目前 只适用于 Python2

  • 安装 Python2 的开发包以及 pip sudo apt-get install python-dev sudo apt-get install python-pip
  • 安装 cairocffi

    安装 cairo: sudo apt-get install libcairo2-dev 安装 libffi: sudo apt-get install libffi-dev 安装 cairocffi: sudo python -m pip install -U cairocffi
  • 安装 Django 及 Django-tagging sudo python -m pip install -U django sudo python -m pip install -U django-tagging
  • 安装 pytz sudo python -m pip install -U pytz
  • 安装 Apache 以及 mod_wsgi sudo apt-get install apache2 sudo apt-get install libapache2-mod-wsgi
  • 安装 grapite 三大组件 sudo python -m pip install -U whisper sudo python -m pip install -U carbon sudo python -m pip install -U graphite-web

32 安装 Graphviz

Graphviz 是画流程图,思维导图等图的首选。它可根据 dot 语言编写的绘图脚本生成指定格式的图片。

安装: sudo apt-get install graphviz

生成图片: dot -Teps input.dot -o out.eps 其中,通过 -T 指定格式。

除此之外,还可以通过 Python 来生成 dot 代码。安装如下: python3 -m pip install -U graphviz

该 package 的实质是通过 Python 生成 dot 代码,然后执行 dot 命令来生成图片。因此一定要保证之前已安装了 graphviz。

33 安装与配置 Spark

从官网下载 spark,并解压到某个目录,假设为 ~/Programs/spark

设置 .zshrc

1
2
3
export SPARK_HOEM="/home/cuckootan/Programs/spark"
export PATH="$SPARK_HOME/bin":$PATH
export PYSPARK_PYTHON="python3"

如果是安装 Spark for Python:则忽略上面步骤,直接执行如下命令: python3 -m pip install pyspark