秒杀SSD，ubuntu极速开发环境搭建
ubuntu打开的正确方式（笑） 在这个快节奏的时代。能够使用最快速度最低代价完成任务具有非常重要的意义，对于现代开发者来说，Linux是生活中必不可少且不可替代的工具，如果我们在开发少或学习中少一些遇到环境的坑，会节省很多时间，潜伏在各种Linux群中数年，发现大家都有手贱（操作失误，笑），因此在本文中给出终极解决方案： 直接使用Ubuntu Live CD 来完成系统的启动。 那么最快的Linux安装办法又是什么呢？其实经过严谨的思考之后我个人觉得是不安装。我们可以准备从grub启动ubuntu操作系统把系统放到内存中，再预制出各种情况的
容器 开发环境
122.70.41.86
讲得什么狗食，不就是iso引导，利用docker吗？挂羊头卖狗肉》？
来自北京的 Chrome 31.0|Windows 7 用户
2015-08-26T06:54:41.000
ubuntu打开的正确方式（笑） 在这个快节奏的时代。能够使用最快速度最低代价完成任务具有非常重要的意义，对于现代开发者来说，Linux是生活中必不可少且不可替代的工具，如果我们在开发少或学习中少一些遇到环境的坑，会节省很多时间，潜伏在各种Linux群中数年，发现大家都有手贱（操作失误，笑），因此在本文中给出终极解决方案： 直接使用Ubuntu Live CD 来完成系统的启动。 那么最快的Linux安装办法又是什么呢？其实经过严谨的思考之后我个人觉得是不安装。我们可以准备从grub启动ubuntu操作系统把系统放到内存中，再预制出各种情况的
### ubuntu打开的正确方式（笑）


在这个快节奏的时代。能够使用最快速度最低代价完成任务具有非常重要的意义，对于现代开发者来说，Linux是生活中必不可少且不可替代的**工具**，如果我们在开发少或学习中少一些遇到环境的坑，会节省很多时间，潜伏在各种Linux群中数年，发现大家都有**手贱**（操作失误，笑），因此在本文中给出终极解决方案： **直接使用Ubuntu Live CD 来完成系统的启动。**


那么最快的Linux安装办法又是什么呢？其实经过严谨的思考之后我个人觉得是**不安装**。我们可以准备从grub启动ubuntu操作系统把系统放到内存中，再预制出各种情况的环境包，也就是环境模块化，因为系统是在整个内存中所以速度非常非常快，需要模块化的内容并不多，比如说ssh vim tmux 为一组工具，开机后一个命令就可以激活工具包，不到几秒钟的时间即可完成，其他的如Chrome浏览器一类的都可以快速完成在内存上的安装。通过这种方式让环境更加灵活更加快速准备好开发环境。


这是一个思路上的变化，从我需要什么就安装什么一起都准备好给你用`->`变成了只启动基础的系统然后我需要什么我就后加载什么。


最后的准备在于容器，Docker 以及RKT与RunC的准备，在团队内可以秒级推送运行的环境。


![](/data/attachment/album/201507/25/225647vww3jwwrq6l32f63.jpg)


本文依然有它的缺点： 主要体现在两个方面


1. 如果默认驱动不好使会造成很多麻烦。
2. 对于内存小的开发机器还是做快照比较好。最少4G内存，我们推荐内存在8G以上最好是16G或者32G内存的机器上采用此方案。


因为本方案整个操作系统都是加载到内存中的，硬盘速度即为内存的速度，我这里实测可以达到4.5Gb/s，所以你准备好屌丝逆袭（买不起SSD）秒杀高富帅了吗？


### ubuntu


对于它的简单介绍可以参考[这里](http://baike.baidu.com/view/4236.htm)。当然对于我本人而言选择Ubuntu主要原因仅仅是对他比较熟悉。并不限制使用什么发行版本。如果您要是选本方案搭建环境，并且选择其他发行版本请选择LiveCD尽量小一点的，如果能自己裁剪LiveCD就更好了，另外尽量选择64位架构。当然自己越熟悉越好。


虽然Ubuntu有一点不自由，但是我个人觉得包的质量管理还是非常好的，的确适合开发者使用。


### Docker


官方：<https://www.docker.com/>


它对于我来说，几乎就像是水，如果没有他就没有今天的丰富多彩的运行方式，它可以让程序连同环境一起打包运行，使得部署备份等等非常方便，对于本次环境构建而言我们可以在个人的registry上备份自己的环境，只需要一小段时间就可以克隆回来。再加上现在各种永久免费的国内加速服务这种环境部署就是程序员天堂。更多细节请关注[这里](http://help.daocloud.io/tutorials/index.html)。


在本文中我们使用单文件版本的Docker文件，方便可控。无任何累赘。本人不喜脚本安装。


### RunC && RKT


这两种产品是libcontainer的代表。相对于Docker来说，它是一个容器只需要一个进程，对于Docker来说，他需要一个守护进程。在本文中（本博主）不评价任何产品的好坏，只说什么时候适合用什么。当然在我们这里利用了它启动方便，挂载方便的特性让我们的工作更方便更方便更方便！


由于现在RunC还没有发布1.0版本文档几乎没有，因此我这里会给出我的详细研究结果。至于RKT还是大家自己摸索，文档已经很全了。


### CoreOS


作为专门运行容器的操作系统，稳定性可不属性都是前所未有，当然我们的容器可以跑在这个上面本文中会提及两个系统的兼容性方案。


1. Ubuntu适合程序开发的情况。启动速度可能在1分钟左右（有点慢）。但是有图形界面，**有定制基础环境的方案。**
2. CoreOS适合跑程序，启动速度在10秒以下适合释放更多内存来跑临时业务，做测试的时候实用此方案。


### 从Grub开始


#### 什么是Grub


它可以装在硬盘上帮助你启动操作系统，几乎所有操作系统都可以，当然也包含本次的方案内容。安装方式有很多种。而且必须得根据自己的情况来安装。因为每个人电脑上的操作系统情况都不一样，有的已经有系统了。有的不想给自己装引导。可能先放到u盘上引导都有可能。因此这里不做安装方法上的更多描述可以自己根据情况到搜索引擎上搜索。


#### Grub 的安装


我之前是安装了windows，所以我直接安装了EasyBCD然后安装NeoGRUB来实现的。具体操作步骤如下：


1. 下载安装EasyBCD
2. 如图所示![](/data/attachment/album/201507/25/225648zh0hcp7tdtyasf7a.png)
3. 安装重启电脑之后选择Grub启动项可以进入一个类似输入命令的界面即可确定完成安装。


### Ubuntu 启动配置


#### 启动准备


如果想要准备启动Ubuntu那么有三个关键要素，


1. [ubuntu-14.04.2-desktop-amd64.iso](http://mirrors.aliyun.com/ubuntu-releases/14.04.2/ubuntu-14.04.2-desktop-amd64.iso)
2. image中casper/vmlinuz.efi
3. image中casper/initrd.lz


这三个文件作为启动的必要文件请放到分区中容易找到的地方。**推荐做法：**给自己的硬盘上开个**EXT4** 分区，然后把三个文件丢到里面去。


#### 启动参数调试


工作中我们讲求流程，当然我们也需要一定的路程，我们不可能一次调整就成功把ISO启动起来。因此我们先加一个调试流程。



```
root (hd0,1)
kernel (hd0,1)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-14.04.2-desktop-amd64.iso ro quiet splash locate=en_US.UTF-8
initrd (hd0,1)/casper/initrd.lz
```

1. 你需要看清楚把文件放到了第几块硬盘上，第几块分区上。组成参数为`(hd0,1)`（我的是0号硬盘第二个分区）。如果你实在分不清可以参考[这里](http://blog.csdn.net/evergreen79/article/details/8580503)。
2. `root (hd0,1)` 设置GRUB的root设备
3. kernel 命令套格式，变化参数 vmlinuz.efi 和 ubuntu-14.04.2-desktop-amd64.iso 要与你放到硬盘上的位置对应，可以**使用Tab自动补全**非常实用。
4. initrd 依然是套格式找到对应硬盘傻姑娘的initrd.lz的位置。
5. 如果出现错误了按`↑`会出现刚才的命令，多加修改直到成功启动。


#### 启动参数放到硬盘中


如果是NeoGrub配置文件路径`C:\NST\menu.lst`，其他的请参考说明文档，一般都会有的。


配置文件写法：



```
timeout 3
default 0

title Ubuntu
root (hd0,1)
kernel (hd0,1)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-14.04.2-desktop-amd64.iso ro quiet splash locate=en_US.UTF-8
initrd (hd0,1)/casper/initrd.lz
```

3秒等待自动选择第一项，名称ubuntu 别的剩下的就是刚才调试内容的命令了。


### 完成刚需配置


刚醒需求配置是指在容器之外的刚醒需求配置，比如说编辑器，SSH等等工具箱。配置方法: `APT`。


1. 修改安装源：`sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list && apt-get update`
2. 安装你需要的软件包：`apt-get install -y vim screen tmux ssh-server`等等
3. 调试你的环境看看是否好使，然后复制文件夹`/var/cache/apt/archives`中所有deb文件即为您刚才所有的安装包。复制到一个可以持久化的文件夹中等待使用。
4. 回调环境： 每当您重新启动之后这些安装包即消失，想恢复，进入到上一步中复制到的文件夹中执行如下命令`dpkg -i *`即可安装预先准备好的软件
5. `灵活使用`，此步骤为发挥组合拳威力的一步。当您反复定制凝练您的安装包之后，会根据个人情况选择不同的目录来初始化您的环境，其结果是，又小又轻，非常可靠。再也不怕手贱导致环境崩坏，再加上外部的git服务保证工作内容的安全性基本上可以肯定的说：`我们的环境与硬件与工作耦合度降低不少`.
6. 对于APT无法安装的内容，比如说JDK 与定制版本的Eclipse您可以通过下载完之后持久化保存到硬盘中，写一个脚本解压后放到硬盘中至于环境直接写入到profile中即可。
7. 使用此方法之后假如您使用IDE真的会有一个非常非常大的速度提升，我打开Eclipse C/C++ `5秒钟`即可。


### 容器安装配置


一般情况下我们安装Docker都是通过网上下载脚本安装，但是这种情况下我们推荐使用直接下载单文件版本的来完成安装安装脚本如下：



```
curl -sSL -O https://get.daocloud.io/docker/builds/Linux/x86_64/docker-latest
chmod +x docker-latest
mv docker-latest /usr/bin/docker
docker -d & 
```

在第三行中复制docker程序到任何Path下的文件夹内备用。在配置上，还是要吧`/var/lib/docker`放到可持久化的软连接下面。比如说按照下面的操作：



```
rm -rf /var/lib/docker
ln -s /isodevice/docker /var/lib/docekr 
```

按照这种方法操作可以让docker image 持久化保存在硬盘中。重启也能找回来。这里注意，如果您之前就实践了CoreOS 171.3 版本上的Docker它使用的是1.6版本他的**存储文件格式**与1.7的不同因此不通用。我就踩到这个坑了。接下来的操作就与Docker一样了。


**注意：**这个安装包： `cgroup-lite_1.9_all.deb` 一定要装，默认的光盘中就差这一个依赖，在下面的安装包中有要不就apt安装保存下来都可以。


### 材料准备


[我在百度云盘](http://pan.baidu.com/s/1hqKqJL6)中准备了三个文件，第一个是docker 1.7.1 第二个准别了vim screen ssh-server tmux CGroup的安装包。最后一个把我常用的Docker images 打包放出来了。其实在准备这个方案花最多时间就是在于精简依赖，最后发现只需要一个CGroup安装包。


### 总结


在本段文档中，我们给出了一个全新的使用Linux操作系统的思路**不安装**。并且做了一定的前期准备工作。启动了Linux操作系统做到本步骤如果您是新手就可以开始Linux的学习旅程了，如果您是需要此方案工作已经可以展开一般性质的工作了。  
最后我真的拆掉我的三爽垃圾ssd（越用越慢）直接上内存。


方案合理要素：


1. root权限过大。有时导致无法挽回的误操作。
2. 现在的电脑内存不是很贵。大部分Linux电脑内存都在闲置。
3. Linux操作系统如果每次执行的任务如果比较单一（一台物理机只给一个人用）真的不会很大。
4. 给重新启动计算机赋予了新的意义。
5. 真正超过SSD的速度，成本更低。(实测启动Eclipse C/C++ 仅需要5s)
