【序】讨论这个问题实际好像没什么意义,实则不然,至少可以更好的降低成本、提高开发效率。

自认为做开发也搞了些年头了,对于程序语言也有一些见解,在此小结一下:

何种应用或者何种需求使用哪种语言一直是困扰架构师和CTO的一个重要问题,这里既需要考虑实现任务的实效更需要考虑成本,同时也需要考虑未来扩展迭代需求以及夸语言场景下协同协作

每种语言都有其优点和不足,自身的特点也决定了其开发的代价不同,首先看看语言的类型特点

1. 先定义一些基础概念

Program Errors 程序错误

  • trapped errors。导致程序终止执行,如除0,Java中数组越界访问
  • untrapped errors。 出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址

Forbidden Behaviours 禁止行为

语言设计时,可以定义一组forbidden behaviors. 它必须包括所有untrapped errors, 但可能包含trapped errors.

Well behaved、ill behaved

  • well behaved: 如果程序执行不可能出现forbidden behaviors, 则为well behaved
  • ill behaved: 否则为ill behaved…

2. 有了上面的概念,再讨论强、弱类型,静态、动态类型

强、弱类型

  • 强类型strongly typed: 如果一种语言的所有程序都是well behaved——即不可能出现forbidden behaviors,则该语言为strongly typed。
  • 弱类型weakly typed: 否则为weakly typed。比如C语言的缓冲区溢出,属于trapped errors,即属于forbidden behaviors..故C是弱类型

前面的人也说了,弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换。譬如说C语言的int可以变成double。 这样的结果是:容易产生forbidden behaviours,所以是弱类型的

动态、静态类型

  • 静态类型 statically: 如果在编译时拒绝ill behaved程序,则是statically typed;
  • 动态类型dynamiclly: 如果在运行时拒绝ill behaviors, 则是dynamiclly typed。

3. 误区
大家觉得C语言要写int a, int b之类的,Python不用写(可以直接写a, b),所以C是静态,Python是动态。这么理解是不够准确的。譬如Ocaml是静态类型的,但是也可以不用明确地写出来。。
Ocaml是静态隐式类型
静态类型可以分为两种:

  • 如果类型是语言语法的一部分,在是explicitly typed显式类型;
  • 如果类型通过编译时推导,是implicity typed隐式类型, 比如ML和Haskell
  • 4.下面是些例子
    无类型: 汇编
    弱类型、静态类型 : C/C++
    弱类型、动态类型检查: Perl/PHP
    强类型、静态类型检查 :Java/C#
    强类型、动态类型检查 :Python, Scheme
    静态显式类型 :Java/C
    静态隐式类型 :Ocaml, Haskell

然后总结一下:

【结论】:由以上的简单理解可以大致分析出来哪种语言更适合哪种场景和需求,这里必须强调一句,程序是运行在计算机和网络中的,所以程序自身的好坏也与计算机系统(服务器)和网络系统有着千丝万缕的关系,既然如此也就可以看出来(主流语言c\php\java\python):

C、C++ 可以使用在几乎所有的场景下,但需要考虑程序运行时的各种健壮性、稳定性,就需要开发主进程之外的特别功能,例如内存回收等等,这无形加大开发的任务量,自然提升开发周期,可c更接近硬件底层,其执行时的效率和资源开销相对较小,所以可用在一些超大型应用中,运行环境要看是客户端还是服务器端,这需要很强的运维能力,尤其是系统优化运维和运维开发的支持。

Java属于强类型、静态语言,因其发展多年,轮子很多,加上用户很多,所以可以几乎胜任一切工作,而且因为有编译器,所以开发早期不需要更多的关注系统能力,所以很多项目都在采用,具体的开发时间成本也不是很长,也可以开发一些大型应用,游戏慎重。

php属于服务器端的脚本语言\动态语言,最适合互联网开发使用,因互联网目前的引用多为B/S架构的,加上其比较模块化,所以更加快捷,开发成本较低,但是其自身的特点决定其运行效率过度依懒环境自身,所以在产品的稳定阶段不建议使用。

python被誉为脚本语言,顾名思义,引用场景非常丰富,加上cpython\jpython以后应用场景和运行效率都可以近似的等同于c\java的运行效率,而且其在web\ope\Data\cloud上的运用也是非常不错的,可以说能够适用于任何场景。

JavaScript属于浏览器端脚本语言,更实用web开发,随着ajax\agalrJS的frame也适用于后端和服务器端的使用

golang确实也很不错,变量\编译器越来越当代化,语法规则也更人性化,未来一定很不错

swift是apple的开源语言,用的不多,还不敢说其未来到底如何

【综上】可以看出来语言必然依赖于三件事:语法语义\编译器或解释器\灵活性;综合来说,在互联网领域,php更适合早期开发使用,php出了7.0,但实际使用时还是需要很多注意的地方,php更适合于一些小步快跑和实验版本的验证场景

python更适合全链条的互联网公司,可以使后端开发\运维开发\数据分析\云平台开发\AI串在一条线上,有很好的的融合性,而且开发速度也很快,不过这种资深开发人才较少

java\c\c++\golang基本属于一类,仅是golang更偏向软件工程,web开发也行,需要走的路填的坑还有不少,java用的最普遍不多说了,c\C++最古老,优越性自不待言

RHCS集群理论暨
最佳实践

什么是集群?
    集群是一组(>2)相互独立的,通过高速网络互联的计算机组成的集合。群集一般可以分为科学集群,负载均衡集群,高可用性集群三大类。
    科学集群是并行计算的基础。它对外就好象一个超级计算机,这种计算机内部由十至上万个独立处理器组成,并且在公共消息传递层上进行通信以运行并发应用程序,像中国的银河,曙光超级计算机。
    高可用性集群,当集群中的一个系统发生故障时,集群软件迅速作出反应,将该系统的任务分配至集群中其它正在工作的系统上执行,通过消除单一故障点和节点故障转移功能来提供高可用性,次节点通常是主节点的镜像。
    负责均衡集群将服务请求分摊处理到集群中的多个节点上。如软件型LVS,硬件型F5。
    在实际生产环境中,这三种集群相互交融,如高可用性集群也可以在节点之间均衡用户负载。
什么是RHCS?
    RHCS即REDHAT CLUSTER SUITE,中文意思即红帽集群套件。它是一套综合的软件组件,可以通过在部署时采用不同的配置,以满足你的对高可用性,负载均衡,可扩展性,文件共享和节约成本的需要。
    RED HAT公司在2007年发布RHEL5时,就将原本作为独立软件发售的用于构建企业级集群的集群套件redhat cluster suite(RHCS)集成到了操作系统中一同发布。
RHCS提供如下两种不同类型的集群:
1、应用/服务故障切换—-通过创建N个节点的服务器集群来实现关键应用和服务的故障切换
2、IP负载均衡—-对一群服务器上收到的IP网络请求进行负载均衡

RHCS技术要点:
1、最多支持128个节点(红帽3和4支持16个节点)
2、可同时为多个应用提供高可用性
3、NFS/CIFS故障切换:支持UNIX和WINDOWS环境下使用的高可用性文件
4、完全共享的存储子系统:所有集群成员都可以访问同一个存储子系统
5、综合数据完整性:使用最新的I/O屏障(barrier)技术,如可编辑的嵌入式和外部电源开关装置(power switches)。
6、服务故障切换:它可以确保及时发现硬件停止运行或故障的发生并自动恢复系统,同时,它还可以通过监控应用来确保应用的正确运行并在其发生故障时进行自动重启。

RHCS组件说明:

175925366

分布式集群管理器(cman)
    Cluster manager 简称CMAN,是一个分布式集群管理工具,运行在集群的各个节点上,为RHCS提供集群管理任务。
    它用于管理集群成员、消息和通知。它通过监控每个节点的运行状态来了解节点成员之间的有关系。当集群中某个节点出现故障时,节点成员关系将发生改变,CMAN及时将这种改变通知底层,进而做出相应的调整。
    CMAN根据每个节点的运行状态,统计出一个法定节点数,作为集群是否存活的依据。当整个集群中有多于一半的节点处于激活状态时,表示达到了法定节点数,此集群可以正常运行,当集群中有一半或少于一半的节点处于激活状态时,表示没有达到法定的节点数,此时整个集群系统将变得不可用。
CMAN依赖于CCS,并且CMAN通过CCS读取cluster.conf文件。
锁管理(DLM)
    Distributed Lock Manager,简称DLM,是一个分布式锁管理器,它是RHCS的一个底层基础构件,同时也为集群提供了一个公用的锁运行机制。DLM运行在每个节点上,GFS通过锁管理器的机制来同步访问文件系统的元数据。CLVM通过锁管理器来同步更新数据到LVM卷和卷组。
DLM不需要设定锁管理服务器,它采用对等的锁管理方式,大大提高了处理性能。同时,DLM避免了单个节点失败需要整体恢复的性能瓶颈。另外,DLM的请求是本地的,不需要网络请求,因此请求会立即生效。最后,DLM通过分层机制,可以实现多个锁空间的并行锁模式。
配置文件管理(CCS)
    Cluster configuration system 简称CCS,主要用于集群配置文件管理和配置文件在节点之间的同步。CCS运行在集群的每个节点上,监控每个集群节点上的单一配置文件/etc/cluster/cluster.conf的状态。当这个文件发生任何变化 时,都将些变化更新至集群中的每个节点上,时刻保持每个节点的配置文件同步。
    Cluster.conf是一个XML文件,其中包含集群名称,集群节点信息,集群资源和服务信息,fence设备等。
栅设备(Fence)
    通过栅设备可以从集群共享存储中断开一个节点,切断I/O以保证数据的完整性。当CMAN确定一个节点失败后,它在集群结构中通告这个失败的节点,fenced进程将失败的节点隔离,以保证失败节点不破坏共享数据。它可以避免因出现不可预知的情况而造成的“脑裂”(split-brain)现象。“脑裂”是指当两个节点之间的心跳线中断时,两台主机都无法获取对方的信息,此时两台主机都认为自己是主节点,于是对集群资源(共享存储,公共IP地址)进行争用,抢夺。
    Fence的工作原理是:当意外原因导致主机异常或宕机时,备用机会首先调用fence设备,然后通过fence设备将异常的主机重启或从网络上隔离,释放异常主机占据的资源,当隔离操作成功后,返回信息给备用机,备用机在接到信息后,开始接管主机的服务和资源。
    RHCS的Fence设备可以分为两种:内部Fence和外部Fence。内部fence有IBM RSAII卡,HP的ILO卡,以及IPMI设备等;外部FENCE设备有UPS,SAN switch ,Network switch等。
栅设备实例
    当节点A上的栅过程发现C节点失效时,它通过栅代理通知光纤通道交换机将C节点隔离,从而释放占用的共享存储。
    当A上的栅过程发现C节点失效时,它通过栅代理直接对服务器做电源power on/off,而不是去执行操作系统的开关机指令。
rgmanager管理
    它主要用来监督、启动、停止集群的应用、服务和资源。当一个节点的服务失败时,高可用集群服务管理进程可以将服务从这个失败节点转移至其点健康节点上,这种服务转移能力是自动动,透明的。
    RHCS通过rgmanager来管理集群服务,rgmanager运行在每个集群节点上,在服务器上对应的进程为clurgmgrd。
    在RHCS集群中,高可用生服务包括集群服务和集群资源两个方面。集群服务其实就是应用,如APACHE,MYSQL等。集群资源有IP地址,脚本,EXT3/GFS文件系统等。
在RHCS集群中,高可用性服务是和一个失败转移域结合在一起的。由几个节点负责一个特定的服务的集合叫失败转移域,在失败迁移域中可以设置节点的优先级,主节点失效,服务会迁移至次节点,如果没有设置优先,集群高可用服务将在任意节点间转移。
    说了这么多,初学者可能还是不明白RHCS组件之间的关系,所以整个图给大家作感性认识一下,RHCS组件可以归到以下图示中:180003222

集群配置和管理工具
    RHCS提供了多种集群配置和管理工具,常用有基于GUI的system-config-cluster,conga等,还提供了基于命令行的管理工具。
    System-config-cluster由集群节点配置和集群管理两个部分组成,分别用于创建集群节点配置文件和维护节点运行状态,一般用于早期的RHCS版本中。
    Conga是新的基于网络的集群配置工具。它是web界面管理的,由luci和ricci组成,luci可以安装在一台独立的计算机上,也可安装在节点上,用于配置和管理集群,ricci是一个代理,安装在每个集群节点上,luci通过ricci和集群中的每个节点通信。
    GFS是RHCS为集群系统提供的一个存储解决方案,它允许集群的多个节点在块级别上共享 存储,多个节点同时挂载一个文件系统分区,而使文件系统数据不受破坏,单一的ext2或ext3无法做到。
    为了实现多个节点对一个文件系统同时进行读写操作,GFS使用锁管理器(DLM)来管理I/O操作:当一个写进程操作一个文件时,此文件被锁定,其它进程无法进行读写操作,操作完成后,RHCS底层机制会把此操作在其它节点上可见。
有GFS就有RHCS,但建立RHCS时,如果不用共享存储,就没有必要用GFS。
资源(Resource)
脚本(script),IP Address,File system可以用来定义一个高可用的web服务功能

实例操作(不带共享存储)
   红帽建议做RHCS集群,一般要三台服务器以上,含三台,其中一台作LUCI,这里作实验因为用的是虚拟环境,加上PC机性能差,所以只用到二台。

180023118

修改各节点的/etc/hosts文件
    注意格式要一致,特别是127.0.0.1行,默认的不合rhcs集群要求,必须改,否则在用luci建立集群时会报错。180036147

在节点1上安装luci软件
[root@rhcs1 ~]# yum install luci*180046847

Luci初始化及重启180101864

在所有集群节点上(rhcs1,rhcs2)安装RHCS软件
[root@rhcs1 ~]# yum install cman
[root@rhcs1 ~]# yum install ricci
[root@rhcs1 ~]# yum install rgmanager

180115239

其它ricci,rgmanager不截图了
    安装完所有RHCS组件后,重启所有节点,并启动ricci,luci服务,rhcs1节点需要启动luci,rhcs2不需要,服务启动完毕后,查看rhcs1节点的11111端口,8084端口有没有在监听,rhcs2节点的11111端口有没有在监听。
[root@rhcs1 ~]# /etc/init.d/ricci start
[root@rhcs1 ~]# /etc/init.d/luci start

Web登录luci进行集群设置
在客户机上,打开浏览器,这里我用火狐,输入https://192.168.145.232:8084,输入初始化时设置的密码,进行web登录。

182404351

新建cluster
设置集群名称,节点信息,然后点submit按钮

182437675

182454115

182506223

   火狐浏览器中,显示这个进度有问题,总是初始化,正常情况下,如果install完毕后,空心圆点会变实心圆点,然后接下是reboot阶段,configure阶段,join阶段,因为我在建集群时选择了reboot所以,集群建完后,所有节点会自动重启。重启后,要确保luci,ricci服务有没有起来。
建立mtt_web后情况

182536225

    点cluster list,查看一下刚创建的集群状态是否正常,从图上看,集群显示绿色,表示正常。

182552860

新建一个失败转移域
    点击mtt_web,进去一个新界面,然后在左边窗中选failover domains下的add a failover domain,根据选项填写转移域名,这里我们取web-failover,在此界面中,可以设置转移域中的优先级,从图上所示,rhcs1节点的优先级为1,rhcs2节点的优先级为10,数值越大,优先级越低,在生产环境中也可以把优先级设置为一样,谁先启动服务,谁就是主节点。

182608224

创建必要的web资源
    创建一些web服务所需要的资源,IP地址,脚本,这里的虚拟IP或叫公用IP,我们设置为192.168.145.235,这个IP要确保不能被其它服务器占用了。

182620960

182636562

    创建一个脚本资源,这个脚本文件其实是一个shell程序,因为本次的httpd是通过yum安装的所以系统会把apache的启动脚本放在/etc/init.d/httpd目录下,如果是源码包安装的,就需要自己编写apache的启动脚本,该脚本里要包括start,stop等字段。

182737550

新建service
    这里的service,并不指apache服务,或mysql服务,这里指整个集群的资源全部组成一个服务,所以这里先定义一个service,然后选择上面定义好的策略,如失败转移域,转移策略,所用的公共IP及脚本资源。

182842857

182816669

182842857

新建fence设备
    上面已讲到fence设备是防止脑裂现象出现,所以我们在此集群中,再增加一个fence设备,因为我们用的是虚拟机,所以就添加虚拟设备的选项,实际生产环境中,根据条件定fence设备。

182904451

182919219

182932430

183002604

183022746

这样下来,集群的环境都搭建好了,完整的配置文件见/etc/cluster/cluster.conf文件
在所有节点上安装http服务
Shell>[root@rhcs1 ~]# yum install httpd
在rhcs1节点上的/var/www/html目录,新建index.html,内容如下:

  1. <html>
  2. <body>
  3. kkkk this is 145.232
  4. </body>
  5. </html>

在rhcs2节点上的/var/www/html目录,新建index.html,内容如下:

  1. <html>
  2. <body>
  3. kkkk this is 145.233
  4. </body>
  5. </html>

启动RHCS集群
先在所有节点是启动cman
Shell>service cman start
如果cman启动没有报错,再在所有节点是启动rgmanager,集群管理器
Shell>service rgmanager start

通过浏览器访问一下,集群
http://192.168.145.235

183047763

在rhcs1节点上,把httpd关闭
Shell>pkill -9 httpd
再通过客户端计算机访问145.235,建立先关闭刚打开的页面,新开一个页面,再输入IP地址,发现,页面显示为145.233。

183101941

    同样,在rhcs2节点上把httpd关闭,不到一分钟,再到访问,网页结果又显示为145.232了。
   这里我用两个不同的index.html来显示内容,是为了好区别集群有没有作故障转移,在实际环境里,所有节点都是一样的,即次节点是主节点的镜像。

后记:
    生产环境中,很多情况下,集群都会挂共享存储,一般为SAN或DAS,所以在以上基础上,还要加GFS文件系统,配置表决磁盘,具体可看附件中redhat官方手册

【注】本转载需要根据具体的场景来设计,本实例仅作为架构思路参考。

随着互联网发展,在生活中从2G、3G、4G到即将来袭的5G信息时代,WI-FI给互联网时代做出了巨大的贡献,那么什么LiFi?LiFi又称为无线通信,英文名LightFidelity(简称LiFi)是一种利用波谱(如灯泡发出的光)进行数据传输的全新无线传输技术,由英国爱丁堡大学电子通信学院移动通信系主席、德国物理学家HaraldHass(哈拉尔德•哈斯)教授发明。

LiFi是运用已铺设好的设备(无处不在的LED灯),通过在灯泡上植入一个微小的芯片形成类似于AP(WiFi热点)的设备,使终端随时能接入网络。该技术通过改变房间照明光线的闪烁频率进行数据传输,只要在室内开启电灯,无需WiFi也便可接入互联网。

作为一项新型的互联网技术,LI-FI可以将我们可以能够看到的LED光源转化为热点,因此,这也就意味着,再未来的生活中,只要有光源就能上网,我们的生活真的能够实现变成随时随地都能上网了,基于LED的LI-FI可达到10GB/s的数据传输速率,比WI-FI的数据传输速率要高的多。

从上图中各项指标都胜过WIFI,虽然看着各方面数据很乐观,那么技术呢?成本呢?等等都导致不能广泛使用。

1.反向通信:从LED灯泡发射信号到手机上的光电二极管只解决了问题的一半,如何从手机发信号回去才能保证通信链路畅通(当然可以用无线电通信作为补充,不过这让这个技术的标准化变得很难)。没有人希望自己的手机在欣赏视频的时候还亮着大灯泡。

2.环境干扰:环境光源有时候会工作在同样的光谱频段,这时候如果环境光源比较强,很有可能LiFi会无法正常通信,由于信/干噪比(SINR)太差。你能容忍太阳光太强的时候,屋里面没法正常通信吗——没错,你手里的红外遥控器在阳光太强的时候有可能会失灵,LiFi也一样。

3.通信距离:虽然在实验室中有论文号称通信能达到1Gbps的带宽,在一般没有专家指导的安装环境中,这实际上很难达到。可以期待的带宽应该在Mbps范围。

4.竞争技术:而且并不像LiFi的声称者所说的那样,无线电通信就不能做到LiFi的优点,实际上WiFi联盟正在制定一个新的标准802.11ad,在60GHz通信,也具有带宽大(~7Gbps)、距离短(~10m)、保密性能好(无法穿墙)等等特点。

5.关联技术:搞可见光通信,就意味着做出来的产品不仅要符合通信的标准,还要符合可见光的技术规范。相关的产品要有更多的认证工作要做,这可能不是一两年就可以完成的。而且怎么通过有线把通信网络接入每个灯泡,也不是那么简单的,目前比较有希望的是同电力线通信(PLC)联合。

6.标准化:目前802.15.7还刚刚起步甚至没有一个统一的标准,前面还有漫长的路要走,要形成一个有影响力的产业,不是一家公司能够做到的。目前来讲,产业链里面还缺少重量级的公司加入。

目前,这种设备目前还非常昂贵,爱丁堡大学正在寻求大规模生产来降低其成本,并且可以把它应用到照明市场。宝马i8前大灯就是基于该激光灯。虽然LiFi精度高使用也更便捷,但是研究成果尚未成熟。对于LIFI来说,像广泛使用目前还是实现不来了,毕竟成本过高,不适合大众化使用,所以目前主流的还是WiFi。


原创内容来自胡多钱,转载请注明

作者简介:胡多钱果批网创始人,自媒体人,科技媒体

一、问题描述

root@ubuntu:/home/chao# apt-get install python-pip
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
正在读取状态信息… 完成
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:

下列软件包有未满足的依赖关系:
python-pip : 依赖: python-setuptools (>= 0.6c1) 但是它将不会被安装
推荐: python-dev-all (>= 2.6) 但无法安装它
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
二、解决办法
步骤一

安装aptitude工具
sudo apt-get install aptitude
步骤二

root@ubuntu:/home/chao# aptitude install python-pip

下列“新”软件包将被安装。
python-colorama{a} python-distlib{a} python-html5lib{a} python-pip
python-setuptools{ab}
0 个软件包被升级,新安装 5 个, 0 个将被删除, 同时 0 个将不升级。
需要获取 542 kB 的存档。 解包后将要使用 2,513 kB。
下列软件包存在未满足的依赖关系:
python-setuptools : 依赖: python-pkg-resources (= 3.3-1ubuntu1) 但是 3.3-1ubuntu2 已安装。
下列动作将解决这些依赖关系:

保持 下列软件包于其当前版本:
1) python-pip [未安装的]
2) python-setuptools [未安装的]
是否接受该解决方案?[Y/n/q/?] n

下列动作将解决这些依赖关系:

降级 下列软件包:
1)     python-pkg-resources [3.3-1ubuntu2 (now) -> 3.3-1ubuntu1 (trusty)]
是否接受该解决方案?[Y/n/q/?] Y

下列软件包将被“降级”:
python-pkg-resources
下列“新”软件包将被安装。
python-colorama{a} python-distlib{a} python-html5lib{a} python-pip
python-setuptools{a}
0 个软件包被升级,新安装 5 个, 1 个被降级, 0 个将被删除, 同时 0 个将不升级。
需要获取 604 kB 的存档。 解包后将要使用 2,513 kB。
您要继续吗?[Y/n/?] Y

读取: 1 http://cn.archive.ubuntu.com/ubuntu/ trusty/universe python-colorama all 0.2.5-0.1ubuntu1 [18.3 kB]
读取: 2 http://cn.archive.ubuntu.com/ubuntu/ trusty/universe python-distlib all 0.1.8-1 [113 kB]
读取: 3 http://cn.archive.ubuntu.com/ubuntu/ trusty/main python-html5lib all 0.999-2 [83.2 kB]
读取: 4 http://cn.archive.ubuntu.com/ubuntu/ trusty/main python-pkg-resources all 3.3-1ubuntu1 [61.9 kB]
读取: 5 http://cn.archive.ubuntu.com/ubuntu/ trusty/main python-setuptools all 3.3-1ubuntu1 [230 kB]
读取: 6 http://cn.archive.ubuntu.com/ubuntu/ trusty/universe python-pip all 1.5.4-1 [97.7 kB]
已下载 604 kB,耗时 1秒 (353 kB/s)
正在选中未选择的软件包 python-colorama。
(正在读取数据库 … 系统当前共安装有 236806 个文件和目录。)
正准备解包 …/python-colorama_0.2.5-0.1ubuntu1_all.deb  …
正在解包 python-colorama (0.2.5-0.1ubuntu1) …
正在选中未选择的软件包 python-distlib。
正准备解包 …/python-distlib_0.1.8-1_all.deb  …
正在解包 python-distlib (0.1.8-1) …
正在选中未选择的软件包 python-html5lib。
正准备解包 …/python-html5lib_0.999-2_all.deb  …
正在解包 python-html5lib (0.999-2) …
dpkg:警告:即将把 python-pkg-resources 从 3.3-1ubuntu2 降级到 3.3-1ubuntu1
正准备解包 …/python-pkg-resources_3.3-1ubuntu1_all.deb  …
正在将 python-pkg-resources (3.3-1ubuntu1) 解包到 (3.3-1ubuntu2) 上 …
正在选中未选择的软件包 python-setuptools。
正准备解包 …/python-setuptools_3.3-1ubuntu1_all.deb  …
正在解包 python-setuptools (3.3-1ubuntu1) …
正在选中未选择的软件包 python-pip。
正准备解包 …/python-pip_1.5.4-1_all.deb  …
正在解包 python-pip (1.5.4-1) …
正在处理用于 man-db (2.6.7.1-1ubuntu1) 的触发器 …
正在设置 python-colorama (0.2.5-0.1ubuntu1) …
正在设置 python-distlib (0.1.8-1) …
正在设置 python-html5lib (0.999-2) …
正在设置 python-pkg-resources (3.3-1ubuntu1) …
正在设置 python-setuptools (3.3-1ubuntu1) …
正在设置 python-pip (1.5.4-1) …

pip就安装好了

前言

要学好Linux,还是得自己搭建虚拟机. VirtualBox比较小巧简单,容易上手.在配合CentOS 6.4使用时,首要的问题就是网卡配置,尤其是使用SSH终端仿真程序(例如SecureCRT)访问主机时,更需要配置好IP.如下为网卡相关的配置.

@Author  duangr

@Website http://my.oschina.net/duangr/blog/182541

1.VirtualBox 配置

1.1 配置页面

1.2 网卡连接方式

  • 仅主机(Host-only)

此连接方式只允许宿主机器与虚拟机之间互通

  • 桥接网络

此连接方式虚拟机拥有一个与桥接网卡同网络下的一个局域网IP,与此局域网内其他机器都互通

  • 网络地址转换(NAT)

此连接方式虚拟机可以访问宿主机器局域网内其他主机,但其他主机不可访问虚拟机

2. CentOS配置

2.1 修改网卡MAC与设备名称eth*的映射

vi /etc/udev/rules.d/70-persistent-net.rules

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:34:81:48", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

P.S. 此文件中的ATTR{address}的MAC必须与上图中虚拟机网卡的MAC地址一致;如若不一致,CentOS会自动创建一条新记录,同时eth*对应的数字会自增.

2.2 配置网卡的具体属性

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.56.10
NETMASK=255.255.255.0
GATEWAY=192.168.56.1
HWADDR=08:00:27:34:81:48

P.S. 此处我配置的是静态IP,目的是防止每次启动虚拟机时IP地址变化. 用过VirtualBox的都知道,56网段是VirtualBox的默认HostOnly网段,既然VM只能与宿主本机相通,就配成静态IP省的麻烦. 另外若要使用DHCP,请将如下配置:

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp
HWADDR=08:00:27:34:81:48

假若网卡对应的网络可以连接公网,可以配置下对应的DNS地址

(以江苏电信DNS为例)

DNS1=218.2.135.1
DNS2=61.147.37.1

修改完配置后重启网卡

ifdown eth0
ifup eth0

P.S. 选择ifcfg-eth* 中N的选择,要与 70-persistent-net.rules 中的NAME一致,同时要保证MAC地址也一致.

2.3 多网卡网络环境下默认网关配置

假若虚拟机存在多个网卡,例如网关分别为

  • 192.168.56.1 — Host-only

  • 192.168.20.1 — Bridge LAN

  • 192.168.10.1 — Bridge WLAN

其中192.168.10.1网络可以连接公网,可以通过增加默认网关的方式访问公网

route add default gw 192.168.10.1

3. 相关链接