因为最近学习需要,开始把工作转移到服务器上。对于我这个从小伴着正版和盗版windows长大的人来说,一开始还真有点不适应。用了一周时间的纠结,终于把linux和windows装好并存,把java,mongodb和opencv配置完成。简要写点心得,具体的安装配置方法网上很多,不全都赘述了。
Ubuntu
先从linux聊起吧。在个人桌面领域,显然windows还是无法撼动的。曾调侃过那些买了苹果笔记本装win的人,发现除了少数做Ios开发的人需要工作(Mac OS)和娱乐(win)必须在双系统下,对其余的人Mac OS则显得可有可无。其实Mac OS也算是UNIX的一个分支,不过在商业包装下显得更光鲜靓丽一些。其实和Mac类似的Linux系统也有一些,名声最大的代表应该算Ubuntu,还有就是红帽后裔Fedora。这两个Linux系统的主要潜在用户是那些曾经用win的个人家庭用户,可以明显的看出他们友好的用户界面以及新特性、驱动的支持方面很用心。举个简单例子,这两个操作系统在下载安装方面都和win一样简单易用,在Live CD方面甚至比win还强。
大家是否有过这样的经历,电脑系统出现崩溃常见的解决方法是重新在C盘安装系统。为防止重要数据丢失,所以尽量把文件放在其他分区下。现在,只需用usb做一个linux安装盘来启动,就可以像临时系统一样察看调用所有文件。而且这个临时系统拥有大多驱动,特别是网卡支持很好,在临时系统中下载其它文件也很方便。类似的有个winpe,下载和制作都没有这两个linux这样便捷,毕竟不是opensource。特别的,在我新装的win7 Ultimate版时,竟然没有集成我的网卡驱动,好在当时身边有能上网的电脑,下载并考过来安装,否则很容易陷入一个尴尬的死结。所以网卡驱动在众多驱动中是很重要的一环节,希望win能有所改进。
夸了下这两个Linux的好处,却也尴尬的发现我仍旧不会首选他们作为个人桌面,其中的理由自然是软件数量。开源带来的价格优势固然好,但是软件开发小组多为社区或者小规模公司,产品显然和商业版本有点区别。简单试了下Ubuntu集成的LibreOffice,对文件格式的支持和功能,已经相当接近微软的Office了。但其它方面的应用,因为Linux的用户数量小,很多软件就没有为其开发相应版本,这就导致用户无法改换OS的恶性循环。典型的就是大量的游戏软件,基本全部支持win,少量支持mac,基本没有支持Linux的。当然并不是所有人都玩游戏,那么我的相机所需的Canon DPP和PhotoShop都给了我充足的理由留在win下,何况那些在国内使用网络支付手段需要的客户端呢。Google drive
虽然Linux发展的很不错了,但是很难从根本上抢占win的地盘。那么Linux的最大优势呢,当然是在服务器上的稳定性。这里最出名的就不再是Ubuntu和Fedora了,大名顶顶的RHEL红帽企业版和它的平民包装CentOS。这两个自己还没有太多使用,没什么心得。建议感兴趣的朋友去了解下Linux发展史,基于GTK的Gnome和基于Qt图形界面的KDE之间的发展史很有意思。Ubuntu的具体安装已经很傻瓜了,网上很多推荐的分区建议。在win环境下用wubi虚拟目前还存在问题,大量的帖子询问ubuntu更新后grub启动无效。而全新安装的话特别要注意自己的品牌电脑,一般在硬盘上存有隐藏的系统恢复分区和启动分区。我的混合硬盘在Ubuntu试用中可以看到硬盘,但在安装时却找不到,劝大家慎重格式硬盘Ext格式。
还有就是有双显卡的笔记本,一般情况下Linux Driver没那么智能,会一直开启显卡导致过热。常见的解决方法是安装第三方显卡驱动(大黄蜂),Bumblebee。
https://wiki.ubuntu.com/Bumblebee
安装后默认独立显卡是关闭的,可以用 lspci | grep VGA看到独立显卡是(rev ff)。需要的时候可以再启动,optirun [options]
Java这种众人皆知广为流传的东西,网上有大量的安装和配置说明,而且极为简便。
http://wiki.ubuntu.org.cn/Java
https://help.ubuntu.com/community/Java
让我不理解的是这些简单的东西为何做出这么多版本,让人难免混淆。目前来看java的开源版和Oracle版对我的使用没有太大区别,但MongoDB问题就来了。MongoDB也是有两个发行版本:
1. apt-get mongodb-clients mongodb-server mongodb-dev 2.
apt-get mongodb-10gen
我的知识浅薄,不知当初是否第三方软件都没有精力做linux的版本,只能靠OS自己的人来做。到后来用户多了,这些工作又到了第三方本身。目前来说上面的mongo版本很旧,已经不再更新了。所以建议都用第二个,10gen自己的版本。官网和下面的链接都说的挺清楚,就不废话了。记得添加repo来更新。
http://askubuntu.com/questions/147135/how-can-i-uninstall-mongodb-and-reinstall-the-latest-version
在windows中大多东西是预编译好的,比如后面还会说的opencv。而MongoDB,每次我都习惯下载最新的版本然后替换老版本,运行时写个一两行的小脚本来配置。在linux下这样是不行的,必须按照上面的方法安装。装好后默认就是打开的,可以直接输入mongo来察看。或者用命令行
sudo service mongodb start / stop / restart
来控制shell运行。因为习惯了win下的使用习惯,我把运行开启关掉了。自己写了个运行命令以管理员身份来打开,使用的db目录依旧是/home/adminXX/data/db。这种用法的缺陷时创造出的数据库文件有权限,需要在属性中解锁之后才能复制操作。而数据库的更新无法像win中那样替换,毕竟是安装在etc下了。所以还是老实按照官方指导,去配置/etc/mongodb.conf吧。很容易看到dbpath和log的变更,但是改变后mongo却打不开,这只是因为没有该文件夹的访问权限。使用
sudo chown mongodb /home/adminXX/data/db -R
sudo chgrp mongodb /home/adminXX/data/db -R
可以改变权限,之后即可正常运行了。如果mongodb可以正常运行,可用mongostat查看,而mongo无法打开。那么很可能是db/下的mongod.lock权限问题,最简单的方法就是删掉后从新打开。 sudo rm /home/adminXX/data/db/mongod.lock
OpenCV
OpenCV有windows预编译好的库,这点和mongo类似,体现出win的便捷性了。在Linux下用Cmake自己编译也并不复杂,安装所需的软件包,下载最新opencv源文件编译即可。
http://docs.opencv.org/doc/tutorials/introduction/linux_install/linux_install.html
主要提两句Java运行库的安装吧。
http://docs.opencv.org/doc/tutorials/introduction/desktop_java/java_dev_intro.html#java-dev-intro
官网的示例中说的很清楚,OpenCV Java bindings需要三样必备东西:
1. JDK(推荐oracle的6/7)
2. Apache Ant
3. Python 2.6或更高
在OpenCV/下建立build子目录,然后用命令行查看所需编译库是否齐全。
cmake -DBUILD_SHARED_LIBS=OFF ..
make -j8
如果看到to be built一栏中有java,使用上面命令行build即可。如果成功,应该可以在build下找到java246.jar类似的文件,而lib下应该有opencv246.so类似的库文件。类似在windows中操作,将jar加入项目,配置好native library path到so就大功告成了。
(14年1月14日补充)
今天在ubuntu下重新安装opencv遇到了新问题。下载解压之后,在终端Terminal中创建了子目录mkdir build。这时在build目录中使用上面的语句发现有权限问题,只得在前面加上sudo,然而更大的问题是make中死活找不到JNI和ANT。在网上搜索一番发现大多还是讨论没有明确指定JAVA_HOME路径,可我再三确认过java没问题。那么原因在哪里呢?就是出现在mkdir创建子目录上,在文件夹里会发现build带锁,所以必须使用sudo才能make,这也是很容易在Linux里发生的权限问题。简单的删掉文件夹后在GUI窗口里以普通身份重新创建此目录,一切恢复正常。