2016/10/29

Ubuntu 16.10 Upgrade 후 발생한 문제들


우분투 16.04에서 16.10으로 Upgrade하고 나서 생긴 몇가지 문제들에 대해서 정리한다. Clean Install을 했으면 발생하지 않았을 지도 모를 문제들도 있다. 참고로, 우분투 Desktop 설치 iso 파일은 우분투 16.04가 1.4GB였는데 16.10은 1.5GB가 되었다. 그런데, 의외로 Upgrade 시간은 예전엔 2시간 정도 걸렸는데 이번엔 1시간 정도 밖에 안걸렸다.

Nvidia 드라이버 문제

우분투 16.10 업그레이드 후 Nvidia Proprietary Driver(v367.57)를 선택해서 재부팅했더니 16.04와 마찬가지로 black screen 문제가 생겼다. 우분투 16.04 설치시와 동일하게 Nvidia Site에서 367.57버전을 내려 받아서 재설치했더니 문제가 해결됐다. 16.04에서 사용하던 Nvidia 드라이버는 커널 모듈 컴파일시 오류가 발생해서 사용할 수 없었다.

fcitx 문제

fcitx process가 뜨지 않아서 한글을 입력할 수가 없다. 언어 설정에서 fcitx로 설정해서 로그 아웃했다가 재로그인 하면 fcitx가 동작하지만 재부팅하면 fcitx 프로세스가 뜨지 않는다. 참고로, ibus를 사용하면 문제가 없다. 그래도 ibus 보다 fcitx를 선호하는 편이라서 임시 방편의 해결책이 필요했기에 시작 프로그램에 fcitx를 넣어 주는 방법으로 해결했다. 즉, Unity Dash에서 Startup Applications의 Add 명령으로 /usr/bin/fcitx command를 추가해 주었다.

gcc/g++ v6.2 문제

g++에서 기본 언어 설정이 -std=gnu++14가 되었다. gcc 6.x부터 바뀐 모양이다. gcc 5.x까지만해도 -std=c++98이었는데 c++14를 써라는 야그. 하긴 Qt도 5.7부터는 c++11을 지원하지 않는 컴파일러는 사용할 수 없단다.

문제는 gcc/g++의 문제라기 보다 NVIDIA CUDA Toolkit에 딸려오는 nvcc가 gcc/g++ 6.x를 지원하지 않는다는 것이다. Tensorflow 등의 Deep Learning에 관심이 있는 사람들은 우분투 16.10을 설치하고나서 후회할 지도 모른다. 하지만, 아래와 같이 해결하면 된다.

$ sudo apt install gcc-5 g++-5

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 100 --slave /usr/bin/g++ g++ /usr/bin/g++-5
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 50 --slave /usr/bin/g++ g++ /usr/bin/g++-6

즉, gcc/g++ 5.x와 6.x를 우분투에 동시에 설치해서 선택해서 사용할 수 있는데 위와 같이하면 우선순위가 높은 gcc/g++ 5.x를 자동으로 사용할 수 있다. 참고로 gcc-5 패키지는 gcc v5.4.1인데 CUDA 7.5/8.0의 nvcc에서 사용할 수 있다.

두 가지 버전의 gcc/g++이 설치돼 있으니 아래 명령으로 버전을 수동 선택할 수도 있다.

$ sudo update-alternatives --config gcc

즉, update-alternatives는 Debian 계열 리눅스 명령으로써 동일한 목적의 패키지들을 사용자가 선택해서 사용할 수 있도록 해준다.

Unity 8/Mir

우분투 16.10부터 Unity 8/Mir 데스크탑이 기본으로 탑재되어 있어서 로그인 화면에서 선택해서 로그인 할 수 있다(?). nouveau 환경에서 로그인이 된다는데 iMac의 문제인지 모르지만 로그인하면 먹통이다. 


기타 참고 사항

간만에 블로그에 와 보니 Syntax Highlighter가 또 다시 동작하지 않고 있다. 구글 드라이브에 올려 놓은 javascript나 css파일들이 동작하지 않는다는 것... 구글링해 보니 구글 이 놈들이 본색을 드러내는 것인지 구글 Cloud 사업하려고 다 막아 버린듯... 그런데, 구글링을 하다가 여기서 github 사이트를 이용하면서 우회하는 방법을 발견했다.