반응형

OS: Ubuntu 14.04.2 LTS (amd64)

KVM: 2.0.0 (qemu-system-x86_64)

Virt-manager: 0.9.5


위와 같은 상태에서 가상 머신(VM)을 만들고 Windows 8.1을 설치하였다. VM의 Display 설정을 VNC 대신 SPICE로 하였고, spicec (콘솔에서 실행하는 spice client)를 통해서는 접근이 잘 되었다.


그러나 virt-manager에서 VM 선택해서 확인하는 창에서는 VNC와 달리 볼 수 없었다. 그 이유는 "Cannot display graphical console type 'spice': No module named SpiceClientGtk" 라는 에러 메세지 때문이었는데, virt-manager와 연동해서 spice 서버의 화면을 보여줄 client 모듈이 없다는 것이었다.


virt-manager에서 spice 방식 display를 확인하기 위한 모듈은 spice-vdagent이고, 우분투에서도 apt-get install로 설치는 가능하지만, 문제는 Ubuntu 소프트웨어 센터에서 제공하는 버전을 설치하고 나면 virtio device를 찾지 못해서 virt-manager 자체가 실행이 안되는 버그가 있는 버전이라는 것이다. 로그 확인을 위해 /var/log/spice-vdagent.log 파일을 보면 아래처럼 에러 메세지가 찍혀 있다.

Sep 7 21:14:52.746986 spice-vdagent[2960]: Missing virtio device '/dev/virtio-ports/com.redhat.spice.0': No such file or directory


이 문제는 아래 링크 페이지에 설명되어있다.

https://bugzilla.redhat.com/show_bug.cgi?id=1006205


확인해 보면 spice-vdagent-0.14.0-5.el7 이후 버전은 이 문제가 해결되었다고 나오지만, 2015년 9월 7일 현재 우분투 소프트웨어 센터(apt-get install)를 통해서 설치되는 패키지는 spice-vdagent-0.14.0-1ubuntu1 이라서 아마도 위의 버그를 포함하는 것 같다.


따라서 2015년 9월 7일 현재로써는 최신 버전의 spice-vdagent를 별도로 다운로드 받아야 한다. 아래 링크에서 spice-vdagent로 시작하는 압축파일을 다운받아서 압축을 풀고 설치 스크립트를 실행해서 설치한다.

http://www.spice-space.org/download/releases/



반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 14.04.2 LTS (amd64)


새로 설치한 우분투 14.04에 xrdp를 설치하고 나서 바로 접속해 보면 회색 화면만 잠시 나오다가 연결이 끊어진다.


~/.xsession-errors 파일을 열어서 에러 메세지를 확인해 보면 다음과 같다:

Xsession: X session started for  at 2015. 08. 06. (목) 20:59:04 KST

X Error of failed request:  BadValue (integer parameter out of range for operation)

  Major opcode of failed request:  109 (X_ChangeHosts)

  Value in failed request:  0x5

  Serial number of failed request:  6

  Current serial number in output stream:  8

localuser:usera being added to access control list


이는 세션을 제대로 연결해 주지 않아서 생기는 문제이다.

원래 gnome session을 쓰려고 했지만 잘 되지 않아서 fxce4 세션으로 시도한 것을 기록으로 남긴다.


xrdp 설치는 이미 되어 있는 것으로 가정한다.

xfce4 데스크탑 환경을 설치한다.


$ sudo apt-get install xfce4


.xsession 파일을 만든다.

$ vi ~/.xsession


.xsession 파일에 아래와 같이 입력한다.

xfce4-session


xrdp 서비스를 재시작한다.

$ sudo service xrdp restart


다시 원격 데스크톱 연결 앱에서 접속을 시도해 본다.


반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 14.04 LTS (64-bit)

KVM version: 0.9.5


인터넷에서 검색해 보면 KVM을 활용하여 브릿지 네트워크를 구축하기 위해서, 자동으로 설정되어 있던 NAT 설정을 지우는 방법은 많이 나와 있다. 어느 해외 블로그에서도 (http://www.cyberciti.biz/faq/linux-kvm-disable-virbr0-nat-interface/) 자동 생성되는 virbr0 인터페이스와 함께 연동된 NAT를 disable 하는 방법은 나와 있지만, 거꾸로 삭제한 NAT 설정을 다시 복구하는 방법이 설명되어 있지 않다.


나도 연구실 서버에 네트워크 브릿지 설정을 진행하면서 NAT를 disable하는 과정을 무작정 따라했는데, 막상 나중에 다시 가상 머신(VM)에 NAT를 쓰게 하려고 보니 어떻게 해야 할지 떠오르지 않았다.리고 결과적으로는 브릿지를 설정하는 과정에서 NAT 설정을 삭제하지 않아도 전혀 문제가 되지 않는다는 것을 알게 되었다.

알고 보니 virt-manager GUI를 이용할 수만 있면 매우 쉽게 NAT 설정을 복구할 수 있음을 알게 되었다. 그리고 굳이 커맨드 라인에서 disable할 필요도 없이 NAT를 중지(disable)하거나 삭제(delete)하는 것도 GUI를 통해서 쉽게 된다. 방법은 아래와 같다.



삭제된 NAT 설정을 복구하기 (새로운 virtual network 생성)


(1) virt-manager를 실행하고, Edit - Connection Details 선택한다.

  원격에서 SSH를 통해서 서버에 접속한다면 X11 forwarding이 가능해야 한다. Desktop Linux에서는 "ssh -X [account_name]@[address]" 명령으로 가능하다.

  Connection Details 창이 뜨면 "Virtual Networks" 탭을 선택한다.



(2) Virtual Network 탭에 가면 아래 그림과 같이 virtual network를 관리할 수 있는 화면이 나온다.

  아래 그림에는 "default"라는 이름의 virtual network가 생성되어 있지만, 위에 링크된 글처럼 disable NAT 과정을 따라하게 되면 default 항목이 사라지고 없을 것이다.

  새로운 virtual network를 만들기 위해서 왼쪽 하단의 "+" 버튼을 누른다.



(3) "Creating a new virtual network" 대화상자가 뜬다. Forward 버튼을 눌러서 진행한다.



(4) Virtual network의 이름을 원하는 대로 지정한다.

  기존에 있던 "default"를 지운 사용자들이라면 간편한 복구를 위해서 이름을 "default"로 입력한다.



(5) NAT를 위한 서브넷 IP주소 대역을 지정한다.

  아래 그림에서는 KVM이 자동으로 192.168.100.* 네트워크를 추천해 주었는데, 원래 지우기 전의 설정에 최대한 맞추기 원한다면 192.168.122.0/24 대역을 써도 좋다.



(6) NAT를 통해서 연결되는 VM들이 할당받을 DHCP 주소 범위를 지정한다.

  앞서서 지정한 NAT의 서브넷 주소 대역 범위 내에서 지정하도록 한다.



(7) 다음 화면에서 virtual network와 physical network 간의 연결을 설정한다.

  여기서는 삭제된 NAT를 복구하는 것이기 때문에 "Forwarding to physical network"를 선택하고, Mode는 "NAT"로 지정한다. Destination 항목은 물리적 네트워크 인터페이스를 지정할 수 있는데, 필자의 경우 굳이 지정하지 않아도 정상적으로 작동하였다.



(8) 마지막으로 설정을 검토하고 Finish를 누르면 새로운 virtual network가 생성된다.





생성된 virtual network를 중지/삭제하기


생성된 virtual network (NAT 설정)을 중지(disable)하려면 처음의 Connection Details 창에서 "X" 버튼을 누르면 된다. 참고로 virtual network 삭제 버튼은 맨 오른쪽의 금지 모양의 버튼인데, 먼저 중지부터 해야 삭제가 가능하다.






생성된 virtual network를 중지/삭제하기


기존에 만들어 둔 VM이 다시 NAT를 쓰도록 하려면 목록에서 원하는 VM을 더블클릭하고, "show virtual hardware details" 버튼을 누른다. (왼쪽에서 두번째 (i) 버튼) 목록 중에서 NIC를 선택하면 우측에 virtual network interface 설정이 나온다.

여기서 Source device 를 아까 NAT로 설정하고 생성한 virtual network로 선택한다. Device model은 아무거나 상관이 없지만 기본 설정은 virtio 이다.





반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 11.04, Ubuntu 12.04 LTS


실험을 위해 여러 대의 노트북에 우분투(Ubuntu) 11.04를 설치하고 내 자리에서 VNC로 원격 접속을 자주 하고 있다. 실험하다 보면 가끔 재부팅을 해줘야 하고, 일일이 노트북마다 로그인시키기 귀찮아서 Ubuntu가 팅할 때 자동 로그인이 되도록 설정했다.


그랬더니 부팅/재부팅하고 자동 로그인이 된 후에는 VNC통해 Remote desktop 접속 하려고 하면 한참을 기다려도 연결되지 않는 것이었다. 왜 그런지 봤더니, VNC 연결 대상 노트북에 아래 그림과 같이 login keyring을 묻는 창이 떠 있었다.


(이미지 출처, Image source: http://askubuntu.com/questions/51378/login-keyring-prompt-appears-twice-on-login )

(노트북에서 스크린샷이 되지 않아서 다른 똑같은 창 이미지를 빌려 왔다.)



인터넷에 영어로 찾아보면 비슷한 문제로 불편을 호소하는 글이 많이 검색된다. 몇 가지 방법이 검색되었지만 어떤 방법은 시키는 대로 해도 해결되지 않아서 (오히려 비밀번호 불일치 에러만 발생했다 ㅠㅠ), 나중에 또다시 헤매지 않도록 working solution을 따로 기록하게 되었다.


부팅 후 자동 로그인이 되도록 설정하면 다른 컴퓨터에서 VNC로 연결해 들어올 때 login keyring을 묻는 것이 문제의 핵심이다. 자동 로그인 없이 부팅 후에 사용자가 명시적으로 계정을 선택해서 비밀번호를 입력해 두면, VNC 연결시 keyring을 묻는 창이 뜨지 않는다. 


따라서 login keyring을 물어볼 필요가 없도록 암호를 없애는 식으로 해결할 수 있다.

(주의: 이렇게 하면 보안상 안전성을 장담할 수 없습니다. 필자는 실험의 편의를 위해서 실험실에 흩어져 있는 장비들만을 대상으로 설정했으므로 참고하시기 바랍니다.)




<Login Keyring 묻는 과정을 없애는 방법>


(1) Passwords and Encryption Keys (암호 및 키)를 실행한다.

  - 유니티(Unity)를 쓰는 경우 검색창에 Passwords 를 입력하면 아이콘이 보일 것이다. 한국어 버전에서는 "암호 및 키"로 검색한다.

  - 그놈(Gnome) 클래식 메뉴에서는 Applications > Accessories > Passwords and Encryption Keys 순서로 선택한다.



(2) Passwords 탭에서 보면 "Passwords: login" 이라는 항목이 보일 것이다. 이 항목을 마우스 오른쪽 단추로 누르고 메뉴에서 "Change Password"를 선택한다.



(3) 암호를 재설정하는 창이 뜬다. Old Password 에는 현재 정의 로그인 암호(계정 생성 후에 암호에 대한 별다른 설정을 하지 않았다면 계정 암호와 동일할 것이다)를 입력하고, Password 와 Confirm 항목은 빈칸으로 남겨 둔다.




(4) 그리고 OK 버튼을 누르면 "Store passwords unencrypted?" 라고 물어볼 것이다. "Use Unsafe Storage" 버튼을 누른다.




이제 우분투를 재부팅하고 원격 컴퓨터에서 VNC 연결을 시도해 보면 login keyring을 묻지 않고 바로 연결될 것이다.



반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 계열 (11.04 32bit, 12.04 64bit 에서 테스트)

무선랜카드: IPTIME N150UA (Ralink RT2870/RT3070 칩셋)



<문제의  배경>

  • Ubuntu 시스템에서 실험을 목적으로 무선랜(Wi-Fi) 디바이스 드라이버(device driver) 코드를 수정하고 재설치하기 위해 compat-wireless-3.6.8-1 의 소스코드를 수정하였다.
  • 개발의 대상이 되는 디바이스 드라이버는 Atheros 계열의 ath9k와 ath9k-htc였고, 이에 따라 compat-wireless 소스코드에서 컴파일 대상을 ath9k로 한정지었다.
    ( $ ./scripts/driver-select ath9k )
  • 저렇게 설정하고 나서 compat-wireless를 컴파일하면($ sudo make install), 원래 Ubuntu에 들어 있던 네트워크 관련 커널모듈을 전부 교체해 버리게 된다. 즉, mac80211, cfg80211과 같이 리눅스에서 무선랜 제어에 사용하는 공통 커널 모듈까지 교체된다는 얘기.
  • 문제는 컴파일 대상 디바이스가 ath9k로 한정되는 바람에 Atheros ath9k 칩셋이 아닌 다른 USB 무선랜카드 (e.g. Ralink 계열, Broadcom 계열 등)는 인식을 못하는 경우가 생긴다.



<문제 상황>

ath9k 디바이스 드라이버를 개발하기 전에 쓰던 USB 무선랜카드는 IPTIME N150UA였다. compat-wireless 개발환경을 사용하고 나서 해당 무선랜카드를 PC에 꽂으니 커널 출력 메세지(dmesg 또는 /var/log/kern.log)에서 아래와 같이 수많은 기능들을 이해할 수 없다는 에러를 뿌린다.

$ dmesg

[338283.992800] usb 1-1.1: new high-speed USB device number 11 using ehci_hcd

[338284.102160] usb 1-1.1: New USB device found, idVendor=148f, idProduct=3070

[338284.102165] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3

[338284.102168] usb 1-1.1: Product: 802.11 n WLAN

[338284.102171] usb 1-1.1: Manufacturer: Ralink

[338284.102173] usb 1-1.1: SerialNumber: 1.0

[338284.122269] Compat-wireless backport release: compat-wireless-v3.6.8-1

[338284.122273] Backport based on linux-stable.git v3.6.8

[338284.122274] compat.git: linux-stable.git

[338284.124318] cfg80211: Calling CRDA to update world regulatory domain

[338284.129011] rt2x00lib: disagrees about version of symbol ieee80211_register_hw

[338284.129016] rt2x00lib: Unknown symbol ieee80211_register_hw (err -22)

[338284.129022] rt2x00lib: disagrees about version of symbol ieee80211_get_hdrlen_from_skb

[338284.129024] rt2x00lib: Unknown symbol ieee80211_get_hdrlen_from_skb (err -22)

[338284.129031] rt2x00lib: disagrees about version of symbol ieee80211_wake_queue

[338284.129033] rt2x00lib: Unknown symbol ieee80211_wake_queue (err -22)

[338284.129039] rt2x00lib: disagrees about version of symbol ieee80211_get_buffered_bc

[338284.129041] rt2x00lib: Unknown symbol ieee80211_get_buffered_bc (err -22)

[338284.129048] rt2x00lib: disagrees about version of symbol wiphy_rfkill_set_hw_state

[338284.129050] rt2x00lib: Unknown symbol wiphy_rfkill_set_hw_state (err -22)

[338284.129060] rt2x00lib: disagrees about version of symbol ieee80211_queue_delayed_work

[338284.129061] rt2x00lib: Unknown symbol ieee80211_queue_delayed_work (err -22)

[338284.129065] rt2x00lib: disagrees about version of symbol wiphy_rfkill_stop_polling

[338284.129066] rt2x00lib: Unknown symbol wiphy_rfkill_stop_polling (err -22)

[338284.129069] rt2x00lib: disagrees about version of symbol ieee80211_ctstoself_get

[338284.129071] rt2x00lib: Unknown symbol ieee80211_ctstoself_get (err -22)

[338284.129081] rt2x00lib: disagrees about version of symbol ieee80211_rx

[338284.129083] rt2x00lib: Unknown symbol ieee80211_rx (err -22)

[338284.129088] rt2x00lib: disagrees about version of symbol ieee80211_iterate_active_interfaces

[338284.129090] rt2x00lib: Unknown symbol ieee80211_iterate_active_interfaces (err -22)

[338284.129093] rt2x00lib: disagrees about version of symbol ieee80211_free_txskb

[338284.129095] rt2x00lib: Unknown symbol ieee80211_free_txskb (err -22)

[338284.129102] rt2x00lib: disagrees about version of symbol ieee80211_tx_status

[338284.129104] rt2x00lib: Unknown symbol ieee80211_tx_status (err -22)

[338284.129107] rt2x00lib: disagrees about version of symbol ieee80211_stop_queue

[338284.129109] rt2x00lib: Unknown symbol ieee80211_stop_queue (err -22)

[338284.129112] rt2x00lib: disagrees about version of symbol ieee80211_stop_queues

[338284.129114] rt2x00lib: Unknown symbol ieee80211_stop_queues (err -22)

[338284.129119] rt2x00lib: disagrees about version of symbol wiphy_rfkill_start_polling

[338284.129121] rt2x00lib: Unknown symbol wiphy_rfkill_start_polling (err -22)

[338284.129124] rt2x00lib: disagrees about version of symbol ieee80211_iterate_active_interfaces_atomic

[338284.129126] rt2x00lib: Unknown symbol ieee80211_iterate_active_interfaces_atomic (err -22)

[338284.129134] rt2x00lib: disagrees about version of symbol ieee80211_channel_to_frequency

[338284.129136] rt2x00lib: Unknown symbol ieee80211_channel_to_frequency (err -22)

[338284.129139] rt2x00lib: disagrees about version of symbol ieee80211_unregister_hw

[338284.129140] rt2x00lib: Unknown symbol ieee80211_unregister_hw (err -22)

[338284.129146] rt2x00lib: disagrees about version of symbol ieee80211_beacon_get_tim

[338284.129148] rt2x00lib: Unknown symbol ieee80211_beacon_get_tim (err -22)

[338284.129150] rt2x00lib: disagrees about version of symbol ieee80211_rts_get

[338284.129152] rt2x00lib: Unknown symbol ieee80211_rts_get (err -22)

[338284.129159] rt2x00lib: disagrees about version of symbol ieee80211_queue_work

[338284.129161] rt2x00lib: Unknown symbol ieee80211_queue_work (err -22)

[338284.130166] cfg80211: World regulatory domain updated:

[338284.130170] cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)

[338284.130173] cfg80211:   (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)

[338284.130175] cfg80211:   (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)

[338284.130177] cfg80211:   (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)

[338284.130179] cfg80211:   (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)

[338284.130180] cfg80211:   (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)

$


USB 연결에는 이상이 없는지 확인해 보니 USB 장치 수준에서는 제대로 인식을 하고 있다.

$ lsusb

Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub

Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

Bus 001 Device 012: ID 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter

$




<해결 방법>

원인이 명확하게 Compat-wireless 개발환경이기 때문에 해결 방법은 간단하다.

Ralink 계열도 이해할 수 있도록 ath9k 뿐만 아니라 다른 모든 칩셋의 소스코드를 다 컴파일하면 된다. 그러면 다른 칩셋 계열의 기능을 이해할 수 있는 mac80211, cfg80211 커널 모듈이 새로 생성되고, 이들이 자동으로 시스템의 /lib/modules/ 에 복사된다.


  (먼저 compat-wireless 개발환경의 최상위 디렉토리로 이동한다.)

$ ./scripts/driver-select restore    <-- 소스코드 전체를 컴파일하도록 기본 설정으로 되돌림

$ sudo make install

  (모든 칩셋을 다 컴파일하기 때문에 성능이 안좋은 PC에서는 꽤 긴 시간이 걸린다.)


$ sudo make wlunload      <-- 기존에 로드된 무선네트워크 관련 모듈을 unload 시킨다.


위와 같이 하고 나서 USB 디바이스 드라이버에 해당하는 모듈을 sudo modprobe를 이용해서 load한다. (예: $ sudo modprobe rt2800usb) 콘솔 화면에서 무슨 모듈이 unload되었는지 확인하고 그것들을 다시 load하면 되는데, 무엇을 load해야 할 지 잘 모르는 경우가 있을 수도 있다. 

그럴 때는 USB 무선랜카드를 뽑았다가 다시 PC에 꽂으면 된다또는 깔끔하게 재부팅하는 것도 좋은 방법이다.





반응형
블로그 이미지

Bryan_

,