我的Linux一万小时

 

这不是一篇鸡汤文,因为我并没有在使用Linux一万小时后成为Linux达人,甚至在很多方面,我连新手都算不上...



这不是一篇鸡汤文,因为我并没有在使用Linux一万小时后成为Linux达人,甚至在很多方面,我连新手都算不上。我走的这些弯路能篇成一本很有参考价值的反面教材,下面,我来讲讲我用Linux都折腾了啥。



Gentoo

在Ubuntu还没有出生的年代,各种发行版百花齐放。以包管理机制区分的话,可以分为两派:直接安装二进制可执行文件的和下载源码自行编译的,Gentoo算是后者中一个比较知名的项目。为了使硬件发挥出更好的性能,Gentoo的emerge命令提供了不少编译参数让用户调教。从内核到日常用的所有工具,都需要用包管理工具自动下载源码后编译,这对于像我这样的Linux新人来说的确能学少不少东西。而且每次编译满屏幕日志飞滚非常酷,改用绿色文字就有种黑客帝国的即视感。

不过,这个机制有个显而易见的缺点,有时候做一些很小的事情都需要花上好长时间编译大量的依赖包。而像我这样的强迫症,总觉得下一次编译换一个参数也许可以使程序运行得更快,以至于很多常用工具我都编译了不下三遍。另外编译内核和格式化硬盘重装Gentoo的事真是数也数不清了。最惨的是,有次同事让我帮忙装一台1U,他用Debian可以分分钟把LAMP搞定上架,而我硬是想用Gentoo压榨性能。我编译了一个下午,反复编译内核浪费了大量时间没能把两块网卡搞定,最后无奈的让他上了Debian。

Gentoo给我的教训是,大量零散的编译调优时间累积在一起会消耗很多宝贵的青春和电费,它们带来的收益微乎其微,不如直接买更好的硬件。选一个有成熟包管理机制,社区活跃的发行版能节省大把精力把真正要做的事做好。这也是后来我只用Debian的一个主要原因。

桌面美化,WM

曾经每天看DistroWatch.com,除了了解各种发行版的动向,还希望看到一个界面更加美观的发行版,因为感觉大部分发行版的开发者审美太非主流。我用了很长时间尚且还看得过去的XFCE和FVWM-Crystal,也用过臃肿浮夸的KDE和Gnome。试了不少布局和配置,下载过很多GTK皮肤和图标库,玩过酷炫的Compiz,调教过中文字体的显示效果。但不管怎么改都感觉哪儿不完美,直到后来接触到同事AppleiBookG4上的Mac系统,便掉进了在Linux上模仿Mac系统界面的深渊。这个Flickr相册里有不少那些年的痕迹。

这同样是一件没有什么收益的事情,2006年后我放弃治疗,改用Mac系统。

wine

周围的人问我为什么不用Windows这种主流的操作系统,倒喜欢用小众的操作系统的时候,我都只是一笑而过,后来我用Mac的时候也常常遇到这样的问题。有意思的是,现在这个问题在大部分互联网公司里变成了:『为什么你不用Mac?』

我一开始用Linux作为开发主力机的确发现有诸多不便。比如同事给我发个MicrosoftOffice生成的文件;比如做网页要在InternetExplorer里调试;比如要上QQ。不过我并没有感觉到Linux不主流,有很多在线论坛有大量热心的Linux用户能帮你解决各种技术问题。而同一时期那些Windows相关的社区全在共享盗版软件。

在还没有虚拟机技术的时候,很长一段时间里我是用GRUB启动多系统的。后来渐渐地用wine这个工具跑起了大部分Windows下的程序,接着完全干掉Windows,再后来因为要流畅地跑魔兽世界内测不得不装回Windows。



生产工具海选

对于开发人员来说,一个非常费神的事情是开发工具,尤其是文本编辑器。我用遍了市面上几乎所有收费或免费的编辑器,都没有找到一款像Windows下的EditPlus那样好用的产品。主流的推荐是Vim和Emacs,我试着去学好Vim,但当时并没有多少好用的插件,加上自己不熟悉各种快捷键,文本编辑效率并不高。幸好后来改用Mac,很长一段时间被TextMate拯救了。

在我的title还是前端开发工程师和Flash开发工程师的日子里,在Linux下绘图也不是一件轻松的差事,我一直用不惯GIMP和InkScape。有试着用wine跑过Flash的IDE和MacromediaFireworks。为了能在Linux下愉快地开发Flash程序,我还把整个项目改用MTASC编译。我很后悔没有早点明白,在Linux下绘图这件事就是自讨苦吃,同一时期在Windows下的各种绘图体验会愉快很多。

运维

因为会使用Linux,所以在开发过程中时不时地会承担一些简单的运维任务。为什么只是简单的,因为更复杂的任务会由那些有RedHat证书的专业运维负责。在我这些年的工作经历中,我曾跑过十多次机房,管理过一些1U服务器,但都只停留在装系统和配置服务环境的阶段,并没有机会接触那些需要大量服务器携同工作的任务。而这些安装和配置的任务,在Debian下又过份地简单,apt-getinstall装好的东西一般不用再多折腾就能很好地使用。所以我没能在运维这一块更加深入,只是变成一个初级熟练工而已。

前几年因为虚拟币的泡沫,我开始有动力自学配置管理工具,学了一点点Chef和Puppet,感觉略复杂个人用不上,所以学了相对简单好用且不需要master服务器的Ansible。有一段时间我控制近50台虚拟机挖虚拟币,最高的一个月有6000元的收入。

随后我试着把一些日常开发中经常需要反复做的事写成AnsiblePlaybook,于是便有了ios-dev-playbook。期间为了和墙做斗争,从vpn-deploy-playbook这个仓库中也学到不少实用技能。但是,很多线上服务其实比某些开源的程序做得好,有时候自己运维往往省不下几个钱。举个例子,Git仓库,我曾经很喜欢自己在Linode虚拟器上搭建GitLab或者Gogs,但是后来发现GitHub无论是在社区工具链集成度以及易用性上都甩开其它竞品好几条街。

另外,这几年,为了满足各种创业公司对高生产效率和低成本的需求,IaaS、PaaS、SaaS以及Docker开始流行,创业公司不再需要专职的运维,开发人员写几个配置文件,在网页里点几下鼠标就能把一个完整的系统弄上线。

所以,我掌握的这些简单的Linux运维的技能,几乎已经被淘汰完了。

我试着去学GoolgeKubernetes和AWSLambda,但感觉业余精力不够,也没有项目可以实践。

总结

如果我晚十年出生,或者早点用上MacOS,或者考了一张RedHat证书,应该就不会这么折腾了。


    关注 LUPA开源社区


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册