搭建优秀的开发环境

Author Avatar
Vista Chyi 2月 28, 2018

更新: 2019-6-9 整理和补充MacOS相关内容.

上学的时候花了不少的时间研究装系统, 选工具, 配环境. 我是个强迫症, 隔不了多久就要折腾一次. 最近逐渐稳定下来, 分享一下自己的经验.

操作系统: Mac OS/Arch Linux

MacOS 应该算是用起来最舒服的了, 毕竟既可以使用Shell和Unix下的工具链, 又有受官方支持的QQ和企业微信这类第三方软件, 确实是很爽. 如果恰巧你的其他设备也在Apple的生态圈里的话, 个人觉得体验确实是最好的. 不过MBP实在是太贵了, 我上学的时候用的是神船的游戏本, 自己加了内存和SSD, 一套下来好像还不到MBP价格的三分之一. 那时候折腾了不少发行版, 也装过黑苹果, 但效果都不大让我满意, 最后停留在Arch Linux上了.
Arch Linux是一个特行独立的发行版,也是一个对开发者非常友好的发行版。其内核支持较高,仓库涵盖非常全面,并且包含绝大多数编译好的常用开发库。

优势

  1. 由于是自己手动从命令行一步一步安装,定制化极强。
  2. 简单,纯净,几乎不存在预装发行版认为你需要结果装好一看连游戏都有的可能性。
  3. 滚动更新,仓库包更新很快,几乎不存在上游已经更新到3.6正式版而你的仓库里只有3.4和2.7可以选择的情况。
  4. 超全的官方仓库,几乎不存在使用某知名库居然要我自己下载源码编译的情况,比如你可以直接用pacman -S opencv来安装最新版本的OpenCV的编译版本。
  5. 超全的第三方仓库,Arch Linux CNAUR的存在,使你几乎不需要添加apt ppa或第三方yum源等操作,甚至网易云音乐WPS等程序都可以直接通过pacmanyaourt安装,开箱即用。
  6. 现代化包管理工具Pacman。
  7. 完善的Wiki,几乎包含关于Arch Linux的一切,优秀的学习资源。

安装

Arch Linux的安装与其他发行版不同,没有提供无脑下一步的GUI安装界面。需要我们从命令行敲命令安装,整个安装过程请参考Installation Guide。安装流程(不含细节)大致总结如下。

  1. 检查时间,网络。
  2. 硬盘分区。
  3. 设置仓库镜像加速安装。
  4. 利用pacstrap最小化安装。
  5. 利用chroot切换至最小化安装的系统并设置root用户密码。
  6. 修改时区,语言,主机名等配置文件。
  7. 安装并配置BootLoader(比较常用的是Grub)。
  8. 重启。
  9. 登录并创建用户,授予新建用户sudo权限。
  10. 启动dhcpd服务并设置为开机自启,检查网络状况。
  11. 安装桌面环境(最简单的是Gnome),启动相应DM并设置为开机自启。
  12. 配置Arch Linux CN源。
  13. 重启。

查找所需文件对应的包

开发过程中经常会出现需要某个动态链接库文件或某个头文件但是不知道应该安装哪个包,那么extra/pkgfile工具就很方便。

$ pkgfile opencv.hpp
extra/boost
extra/opencv

Shell:Oh My Zsh

Zsh相比Bash有更强大的功能和拓展性,但配置起来相当麻烦。不过现在Oh My Zsh项目的出现解决了这一问题。现在我们只需要直接安装Zsh和Oh My Zsh就好了。安装Zsh与Oh My Zsh:

$ sudo pacman -S zsh git curl
$ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Oh My Zsh

实用命令行工具与配置文件

Dotfiles收集了一些常用的配置文件,方便一键配置如Vim,Tmux等。

喝茶

启用BBR

BBR是一种新的由Google提出的拥塞控制算法,启用能够优化服务器网络。服务器大多使用CentOS,这里以CentOS 7举例:

我反对使用 Ubuntu 作服务器,理由看这里: Bug #1462311 “proftpd mod_copy issue (CVE-2015-3306)” : Bugs : proftpd-dfsg package : UbuntuProftpd 是一个服务端软件。有一天它曝出了一个远程攻击的漏洞。上游:2015-04-07 16:35 UTC 上游接到报告,2015-04-07 16:55:31 UTC修复补丁已经完成,2015-05-28 05:59:40 UTC 补丁进入将要发布的新版本。Bug 4169 – Unauthenticated copying of files via SITE CPFR/CPTO allowed by mod_copyDebian:Fri, 17 Apr 2015 19:27:02 UTC 收到报告,Tue, 19 May 2015 12:53:10 +0200 放出安全更新(如果我没理解错的话)。#782781 - proftpd-dfsg: CVE-2015-3306: unauthenticated copying of files via SITE CPFR/CPTO allowed by mod_copyUbuntu: 2015-06-05,看清楚了,这是在上游和 Debian 修复之后近一个月之后!发生什么事情了呢?有人给 Ubuntu 报告了而已。然后什么时候修复的呢?——抱歉,还没修复。攻击依旧是可行的。后边有人评论:「This has not been fixed in 14.04 LTS. Came here after discovering hacking attempts. Sadly.」14.04 LTS 支持到什么时候?2019-04。

安装新内核

BBR是高版本内核支持的功能,我们首先需要升级内核。查看当前内核版本:

# uname -r
3.10.0-514.2.2.el7.x86_64

安装ELRepo仓库:
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

安装最新内核:
# yum --enablerepo=elrepo-kernel install kernel-ml -y

确认安装结果:
# rpm -qa | grep kernel
kernel-ml-4.9.0-1.el7.elrepo.x86_64
kernel-3.10.0-514.el7.x86_64
kernel-tools-libs-3.10.0-514.2.2.el7.x86_64
kernel-tools-3.10.0-514.2.2.el7.x86_64
kernel-3.10.0-514.2.2.el7.x86_64

显示Grub引导启动菜单项:
# egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
CentOS Linux 7 Rescue a0cbf86a6ef1416a8812657bb4f2b860 (4.9.0-1.el7.elrepo.x86_64)
CentOS Linux (4.9.0-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-514.2.2.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-bf94f46c6bd04792a6a42c91bae645f7) 7 (Core)

找到新内核对应的位置(从0开始),请按照自己的输出进行修改,此处为1,设置Grub默认启动新内核并重启:
# grub2-set-default 1
# shutdown -r now

重新查看当前内核版本:
# uname -r
4.9.0-1.el7.elrepo.x86_64

启用BBR

在内核升级完毕后,启用BBR功能。修改sysctl配置:

# echo 'net.core.default_qdisc=fq' | tee -a /etc/sysctl.conf
# echo 'net.ipv4.tcp_congestion_control=bbr' | tee -a /etc/sysctl.conf
# sysctl -p

确认BBR已启用:
# sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno
# sysctl -n net.ipv4.tcp_congestion_control
bbr
# lsmod | grep bbr
tcp_bbr                16384  0

配置Chrome

Chrome可以通过安装SwitchyOmega插件与本地SHAD0WS0CKS客户端通信,同时可以实现只有访问不存在的网站时才走SHAD0WS0CKS代理的功能。配置过程请参考配置

建立Http-Proxy

对于很多不支持S0CKS协议但可以设置Http代理的程序,我们需要自行建立Http-Proxy,将Http请求转为S0CKS5协议并走SHAD0WS0CKS代理。这里我们使用Privoxy。安装,配置并启动Privoxy:

# pacman -S privoxy
# echo "forward-socks5t / 127.0.0.1:1080 ." >> /etc/privoxy/config
# systemctl start privoxy

现在我们就可以通过本地8118端口进行HTTP请求代理,也可以通过配置环境变量HTTP_PROXYHTTPS_PROXY来使如curl等命令行工具走HTTP代理。

配置Git

最近在家网络抽风,不能正常使用git连接GitHub(配置之前Git不知道SHAD0WS0CKS的存在),这里给出配置,配置Git使用代理:

$ git config --global http.proxy 'socks5://127.0.0.1:1080'
$ git config --global https.proxy 'socks5://127.0.0.1:1080'
$ git config --global core.gitproxy "git-proxy"
$ git config --global socks.proxy "localhost:1080"

这样,git://...http://...https://...请求都会走我们配置的代理了。但实际上Git还有一种SSH协议的请求(ssh://git@...),我们的代理不会对这种类型的请求起作用,因此很多git命令还是直连而非走SHAD0WS0CKS连接。我们需要手动修改本地SSH针对github.com的代理。我们首先需要安装Corkscrew,Corkscrew能够让SSH走Http-Proxy。安装Corkscrew:
$ sudo pacman -S corkscrew

修改SSH配置文件~/.ssh/config为以下内容
Host github.com
    User git
    ProxyCommand corkscrew 127.0.0.1 8118 %h %p

IDE:Jetbrains系列

本文没有提到文本编辑器,这个比较主观,我个人习惯Vim和Atom。不过IDE一定要推荐一下Jetbrains家的产品。Jetbrains家的IDE覆盖很全,C++、Java、Python、Android、Go、Ruby和数据库等等都有,并且操作风格相似。Jetbrains家的IDE功能十分好用,大家用用就知道了。

许可协议:署名-非商业性使用-相同方式共享
本文链接:https://blog.angelmsger.com/搭建优秀的开发环境/