本文我們來講講linux核心版本的gentoo如何安裝kvm+spice及安裝opencv的步驟過程,對gentoo感興趣的朋友可以看看。
gentoo安裝kvm+spice
很早之前就聽說spice相對vnc來說要強大很多,之前因為安裝的是32位的系統,沒法進行嘗試,安裝了64位的系統之后,還沒時間去折騰過。
上上周其實已經將以前的windows虛擬機的圖形方式從vnc換成了spice,昨天又搞定了agent的啟動和遠程復制粘貼。
先說下安裝,安裝的過程相對比較方便,首先需要卸載原來安裝的app-emulation/qemu-kvm,因為之后要安裝的擁有spice功能的kvm和這個包是相互block的。卸載了之后,就需要重新emerge app-emulation/qemu-kvm-spice這個包。否則直接在virt-manager中將虛擬機的顯示從vnc切換到spice,在啟動的時候會提示這個版本的kvm不支持spice協議。其他和spice相關的包還有:app-emulation/spice,app-emulation/spice-protocol等,如果要在virt-manager中直接接入到spice界面,需要安裝net-misc/spice-gtk這個包(不過我在kde中用的時候,發現用net-misc/spice-gtk的時候,會導致整個界面都變成透明的,估計是因為gtk和kwin的特效不太兼容)。
安裝還是非常簡單的,安裝完成之后,就要重新配置原來的windows虛擬機了。在virt-manager中刪掉原來的vnc顯示,新增一個graphics,類型選擇spice server。將原來視頻中使用的虛擬顯卡換成qxl,這樣啟動虛擬機之后,就會使用spice了。
前面說到了kde中使用spice-gtk有很多不正常的地方,所以我是直接使用spicec這個命令的,因為沒有配置任何的加密,所以連接非常簡單,直接使用:
spicec -h 127.0.0.1 -p 5900
端口號可以在增加spice server的時候設置,如果選擇自動分配,那么會從5900開始遞增分配。
啟動之后,需要給里面的windows安裝驅動,windows需要的所有二進制文件,都可以在http://spice-space.org/download.html這里的Windows binaries中找到。首先下載qxl driver,在windows提示需要安裝驅動文件的時候,安裝這個qxl driver,就可以完成了spice顯示的功能了。
之前按照http://www.linux-kvm.com/content/rhev-spice-guest-drivers-released-windows這個頁面安裝windows驅動,前面安裝qxl非常方便,但是后面的vdi port driver卻一直沒有提示需要安裝,在最后一步Install SPICE agent之后,這個服務一直無法啟動,第一次的嘗試spice就到此為止了。
之后又繼續搜索了下這個spice agent無法啟動,在redhat的bugzilla中發現原來現在sprice agent已經不通過vdi了,需要通過virtio-serial來進行交互。在virt-manager的界面上,怎么樣都找不到如何添加這個設備的方法,最后只能通過編輯虛擬機配置文件的方式直接修改了。通過使用virsh edit XXX (XXX為虛擬機的名字),會打開虛擬機的配置文件,根據libvirt網站上的介紹,在devices標簽中增加了兩個channel:
- <channel type=’pty’>
- <target type=’virtio’ name=’arbitrary.virtio.serial.port.name’/>
- <address type=’virtio-serial’ controller=’0′ bus=’0′ port=’1’/>
- </channel>
- <channel type=’spicevmc’>
- <target type=’virtio’ name=’com.redhat.spice.0’/>
- <address type=’virtio-serial’ controller=’0′ bus=’0′ port=’2’/>
- </channel>
保存這個配置文件,啟動虛擬機,這個時候windows又會提示發現了新硬件,需要使用spice下載頁面上的Windows virtio-serial driver進行安裝,安裝完成之后,重新安裝下spice agent,這個時候spice agent服務就能夠正常啟動了,通過這個服務,虛擬機就能夠和宿主機共享剪切板了.
gentoo安裝opencv
之前的基于opencv的應用,在換了gentoo之后,讀取png的圖片的時候會提示:
libpng warning: Application was compiled with png.h from libpng-1.2.29
libpng warning: Application is running with png.c from libpng-1.4.5
寫了個腳本之后,發現這個應用依賴的png庫都是1.4.5的,上面的提示是libpng在編譯時指定錯了版本,雖然我本地有1.2和1.4兩個版本的libpng,但是頭文件只有1.4的,仔細看了下編譯完的目錄,通過搜索png.h這個關鍵字,發現竟然以來了opencv里面自帶的libpng,按理說如果發現了系統的libpng之后,就不應該再用自帶的libpng了,最后在highgui模塊的cmakelists.txt文件中發現了這些內容:
- if(WITH_JPEG)
- add_definitions(-DHAVE_JPEG)
- if(NOT JPEG_FOUND)
- set(use_3rdparty TRUE)
- endif()
- endif()
- if(WITH_PNG)
- add_definitions(-DHAVE_PNG)
- if(NOT PNG_FOUND)
- set(use_3rdparty TRUE)
- endif()
- endif()
- if(WITH_TIFF)
- add_definitions(-DHAVE_TIFF)
- if(NOT TIFF_FOUND)
- set(use_3rdparty TRUE)
- endif()
- endif()
- if(WITH_JASPER)
- add_definitions(-DHAVE_JASPER)
- if(NOT JASPER_FOUND)
- set(use_3rdparty TRUE)
- endif()
- endif()
- if(use_3rdparty)
- include_directories(“${CMAKE_CURRENT_SOURCE_DIR}/../../3rdparty/include”) --Vevb.com
- endif()
也就是說,這幾個庫里面任意一個沒有的話,都會把3rdparty/include這個目錄加入到頭文件的搜索目錄中,gentoo在emerge的時候,默認是沒有USEjpeg2k的,也就是不使用系統的jasper庫,導致引用了自帶的png.h.
找到了原因之后,解決起來就很方便了,在emerge opencv之前,確保把jpeg2k加入到USE中即可.
|
新聞熱點
疑難解答