2014/11/25

Ubuntu VirtualBox Guest 복구


Virtual Box 4.3.18로 우분투 14.10 게스트 가상 머신을 EFI 모드 + btrfs 파일시스템으로 설치했는데 설치 후 부팅이 안되는 문제가 있었다. 우분투 14.10의 문제인지 버추얼 박스 문제인지는 확실하지 않다. 마침 어제 Virtual Box 4.3.20 update가 떠서 홈페이지 ChangeLog를 봤더니 EFI 수정사항이 있단다. 업그레이드하고 나서 그간 방치했던 우분투 14.10 게스트를 다시 돌려 봤으나 역시 안돌아 간다.

Virtual Box 4.3.20 Upgrade...

그런데, EFI 모드 + btrfs 파일시스템인 우분투 14.04 게스트 가상 머신은 호스트를 우분투 14.10으로 Clean Inastall 하고 나서도 잘 돌아가던 놈이다. Virtual Box Guest를 upgrade하려고 이놈을 부팅했더니 로그인 후 먹통이다. 콘솔 모드로는 로그인이 가능해서 Guest Additions를 설치하려고 했으나 [Device] > [Insert Guest Additions CD Image...] 메뉴를 사용하면 이미 mount 되어 있어서 mount가 안된다고 경고 창만 뜬다. 일단, 콘솔에서 강제로 아래와 같이 설치했다.

$ sudo mount /dev/cdrom /mnt
$ cd /mnt
$ sudo ./VBoxLinuxAdditions.run

$ sudo reboot

Virtual Box Guest에 발생한 문제들

재부팅하고 나니 문제가 더 심각해 져 있었다. EFI System Partition이 마운트가 안돼서 Skip하던지 Manual로 마운트 해 보란다. 놀랍게도 Skip을 하니까 부팅은 된다. 화면 크기 조정도 안되고 투명창 효과도 사라진 걸 보니 Guest Additions가 잘못 설치됐을 거란 생각이 들어 다시 설치하려고 iso 파일을 마운트하려고 했더니 황당한 오류가 발생...

$ sudo mount /dev/cdrom /media/cdrom
mount: unknown filesystem type 'iso9660'
EFI System Partiton을 마운트 하면 아래와 같은 오류 메시지가 나온다.

$ mount -t vfat /dev/sda1 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/sda1,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
$ dmesg | tail
[ 1605.267871] FAT-fs (sda1): IO charset iso8859-1 not found
또 다른 문제도 발생했는데 패키지 관리 시스템까지 망가진 것이다. apt-get install -f 하란다.

$ sudo apt-get install -f
....... 
E: Internal Error, No file name for libc6
W: Could not perform immediate configuration on 'multiarch-support:x86_64'. Please see man 5 apt.conf under APT::Immediate-Configure for details. (2)
E: Sub-process /usr/bin/dpkg returned an error code (1)
음... 망가져도 이렇게 우분투가 망가지는 걸 본건 처음이다. 기왕 망가진거 우분투 설치 iso 로 부팅해서 복구해 보기로 했다.

우분투 설치 iso로 우분투 게스트 부팅 후 복구

버추얼 박스 Storage에 우분투 14.04.1 iso 이미지를 CD에 지정하고 재부팅한 후 터미널을 띄워서 Grub을 우선 복구했다. 참고로 /dev/sda2가 우분투가 설치된 btrfs 파일시스템이고, /dev/sda1이 EFI System Partition이다.

$ sudo -i

$ mount -o subvol=@ /dev/sda2 /mnt
$ mount -o subvol=@home /dev/sda2 /mnt/home
$ for i in /sys /proc /run /dev; do mount --bind "$i" "/mnt$i"; done

$ chroot /mnt
$ mount /dev/sda1 /boot/efi
$ grub-install /dev/sda
$ update-grub

그 다음은 패키지 관리 시스템을 복구했다. 먼저, 시스템 전체가 망가진것인지 확인하기 위해서 아래 명령이 정상인지 확인한다.

$ /bin/date

결과가 다행히 정상이다. 즉, 패키지 데이터베이스만 깨진 것이다. 패키지 status backup 파일 중 괜찮아 보이는 놈을 사용하기로 했다.

$ mv /var/backups/dpkg/dpkg.status.2.gz /var/lib/dpkg/
$ cd /var/lib/dpkg
$ mv status org-status
$ gunzip ./dpkg.status.2.gz
$ mv dpkg.status.2 status

$ reboot

여기 까지 하고 나서 재부팅해서 apt-get update 했더니 반응이 없다. 저장소 서버를 교체해 줄 필요가 있어 보였다. 소프트웨어 저장소 서버를 KAIST FTP에서 Main 서버로 교체했다.

$ apt-get update
$ apt-get upgrade

교체 후 위 두 명령이 제대로 동작한다. 소프트웨어 upgrade가 동작하는 것을 보니 패키지 관리 시스템은 복구가 된 것이 분명하다.

문제는 앞서의 mount 오류가 여전히 발생하고 있다는 것이다. 그런데 upgrade 목록에서 새 Kernel이 마침 올라와 있어서 혹시나 하고 Kernel을 Uprade 한 후 재부팅 했더니 mount 문제도 해결됐다.

그리고 나서, Virtual Box Guest Additions도 다시 설치하고 재부팅하니 모든 것이 정상으로 돌아왔다.

복구 소감

어디서 부터 문제가 시작된 것인지는 너무 당황하고도 급하게 복구하느라 정확히 알 수 없지만 Virtual Box Upgrade를 앞으로는 좀더 신중하게 할 필요가 있겠다.

우분투 14.10이 EFI 모드에서 안돌아 가는 문제가 해결됐는지는 Virtual Box 14.10 저장소 버전이 나온 후 다시 시도해 볼 필요가 있겠다. EFI 문제인지 EFI + btrfs 파일시스템 문제인지도 확실하지 않다.

2014/10/31

Ubuntu 14.10 ibus 설정 및 한글 이슈


우분투 14.10에서는 ibus-hangul 설정이 완전히 바뀌었다. 한마디로 다른 패키지와의 의존성을 탈피하기 위해 독립선언을 했다고나 할까? 이에 따라 "Ubuntu 14.04 ibus 한영키 설정과 이슈"에서 다루었던 ibus 한영키 설정 방법들은 대부분 의미가 없게 되었다. 기본적으로는 사용자가 아무것도 건드리지 않아도 한글 언어팩이 설치됐으면 한영키로 한글 입력이 가능하도록 하자는 취지이다. 일단, 우분투 14.10 beta2에서 확인한 바로는 설치시 언어를 "한국어"로 설치하면 데스크탑 키보드 환경에서는 아무 설정없이도 우분투만 설치하면 한영키가 기본 한영전환키로 잘 동작한다.

그런데, 한국 우분투 커뮤니티의 최근 게시물을 보면 노트북에서는 잘 동작하지 않는 듯하다. 또한, 나처럼 데스크탑 키보드 환경에서 우분투 설치시 언어를 영어로 설치한 경우에도 ibus-hangul이 정상 동작하지는 않는다. 아마 영어 뿐만 아니라, 한국어가 아닌 다른 언어로 설치할 경우에도 비슷한 문제가 발생할 것이다.

우분투 14.10을 영어로 설치시 ibus 한영키 설정 방법

1. 한글 언어 팩 완전히 설치

"Ubuntu 14.10 Clean Install" 게시물에서 언급한 바와 같이 우분투 설치 시에 시간대(Time Zone) 설정을 Seoul로 했으면 한글 언어팩이 자동으로 추가된다. 이것 만으로는 안되고 우분투 설치 후 [System Settigs] > [Language Support] 아이콘을 선택하면 누락된 언어팩을 자동으로 설치해 준다. 설치 후 반드시 재로그인 해야 한다.

2. "Korean(Hangul)" input source 추가

ibus가 제대로 동작하기 위해, [System Settings] > [Text Entry] > [Input sources to use:] 에서 아래 화면과 같이 "Korean(Hangul)"을 추가하고 [^] 버튼으로 맨 위로 올려 놓아야 한다. 그리고 나서, 재로그인 하거나 Unity 상단 패널의 [input method] 아이콘을 선택해서 "Hangul"을 선택하면 태극 문양 아이콘 상태가 되는데 이 때부터 한영키가 동작한다.


참고로, 기본 우분투 설치후 화면을 위의 설정과 비교하기 위해 아래에 같이 올려 놓았다.


3. 한영 전환키 변경

한영 전환키 설정과 관련해서는 우분투 14.04와 달리 위의 화면에서 [Switch to...] 두 곳에 한영 전환키를 설정하면 절대로 안된다. 한영키 대신 다른 키를 사용하고 싶으면 Unity 상단 패널의 태극문양 아이콘을 선택해서 [Setup]을 누르거나 터미널에서 아래 명령을 사용하면 된다.

$ ibus-setup-hangul

우분투 14.10 한글 이슈

1. gedit 및 Google chrome 등 GTK 2 애플리케이션에서의 한글 입력 문제

위의 ibus 한영키 설정방법 만으로도 터미널에서 한영키로 한글 입력해 보면 별 문제가 없어 보인다. 그런데 gedit를 사용해 보면 새로운 문제가 발생한다. 단어나 문장을 Copy & Paste하고 나서 한글 입력이 "가나다"를 입력하면 "ㄱㅏㄴㅏㄷㅏ"와 같이 바뀐다.  또한, gedit에서 갑자기 Mouse Pointer가 사라지는 증상이 생긴다. 다른 Window를 선택했다가 gedit로 돌아오면 두가지 현상이 모두 해결되기는 한다.

gedit 뿐만 아니라, Google Chrome에서도 한글 입력이 안되거나 스페이스 키가 오작동하는 문제가 발생한다. 이는 Mint 17에서 나타나는 한글 입력 문제와 동일한 것이다.

$ sudo apt-get install ibus-gtk

우분투 14.10에는 ibus-gtk가 ibus와 함께 설치 되지 않았기 때문에 발생하는 문제이다. gtk 2를 사용하는 대부분의 애플리케이션에서 한글입력 문제가 발생할 것이다.

참고로, Mint 17에서는 ibus-gtk3 패키지도 누락된 것 같다.

$ sudo apt-get install ibus-gtk3

ibus-gtk나 ibus-gtk3를 설치한 후에는 GTK_IM_MODULE 환경변수가 올바로 동작하도록 하기 위해 재로그인해야 한다.

2. 한영 전환 상태 아이콘 필요

우분투 14.04 버전까지는 ibus 사용시 태극 문양이 한글 입력 상태를 의미했다. 우분투 14.10에서는 태극 문양이 ibus-hangul이 정상적으로 설치되었음을 의미한다. 즉, 우분투 14.10에서는글자를 입력한 후에야 한글입력 상태인지 영문 입력상태인지 알 수 있다는 뜻이다.

3. Qt 5.2+ 애플리케이션에서의 한글 입력 문제

Qt 쪽에서 관련 개발자들이 작업 중인데 언제 해결 될지는...

4. 기타 노트북 키보드 한영키 문제

나중에 기회가 되면 확인 필요...

우분투 한글 언어팩 설치 관련 개선 필요 사항

앞서 "Ubuntu 14.10 Clean Install" 게시물 중간에 언급한 바 있지만, 우분투 설치 프로세스 상에서 한글 언어팩 설치 여부를 언제 결정하는 것이 합리적인가 하는 문제와 "Korean(Hangul)" input source를 우분투 설치 후에 수작업으로 반드시 해 주어야 하는가 하는 문제 들에 대해서 개선이 필요하다. 이것은 우분투 14.10만의 문제가 아니고 우분투 설치 전반에 대한 문제이다.

1. 우분투 설치 프로세스 중 한글 언어팩 자동 설치 결정 시점

일단, 현재 한글 언어팩 설치 여부는 시간대를 서울로 설정할 때 결정하고 있는 듯 하다. 미국인이 서울에 거주하면서 한글을 사용하지 않는 경우도 있고, 한국인이 외국에 거주하면서 한글을 사용하는 경우도 있기 때문에 시간대를 가지고 한글 언어팩 설치 여부를 결정하는 것은 문제가 있다. 키보드를 한글 키보드로 설정했을때 한글 언어팩을 자동 설치하도록 해주면 될 것이다.

2. "Korean(Hangul)" input source 자동 추가

또, "Korean(Hangul)" input source를 추가하는 것도 한글 키보드를 선택했을 때 자동으로 추가되도록 하면 좋을 것이다.

3. 한글 언어팩 불완전 설치 문제

한글 언어팩이 완전히 설치되지 않는 문제도 남아 있지만 우분투 14.10에서는 처음 로그인 후 경고창도 뜨더라. 반자동인 셈인데 그럭저럭 참을만 하기는 하다.

[추가] ibus 사용시 게스트 가상머신에서의 한영키 사용 문제는 해결됨

우분투 14.04에서 ibus 사용시 별도의 입력 환경이 있는 Virtual Box guest 머신으로 한영키 시그널이 잘 전파되지 않아 한영키를 쓰기 어려웠던 문제가 있었는데 우분투 14.10에서는 발생하지 않는다. Windows 게스트나 우분투 게스트나 한영키를 쓰는데 문제가 없다.

Mac에 Ubuntu 14.10 설치 후 부팅 이슈


"Ubuntu 14.10 Clean Install"에서 언급했듯이 우분투 14.10 설치 후에 iMac에서 우분투로 부팅할 수 없는 문제가 발생했다. 현재, iMac은 Mac OS X Yosemite, Windows 8, Ubuntu 14.10의 Triple-OS가 EFI mode로 설치 되어 있다. 부팅은 "Apple Mac에서 EFI Multi-OS Booting"에서 다룬 바와 같이 Mac OS X의 boot manager를 사용하도록 설정되어 있다. 

우분투 14.10 설치 후 Mac 부팅시 나타나는 증상

일단, 우분투 14.10을 설치하고 나서 부팅하니 부팅 순서가 바뀌었다. Option키를 누르지 않으면 Mac OS X로 부팅하도록 했었는데 Windows로 부팅한다. 아마 UEFI 기본 boot loader(fallback bootloader)를 Windows boot manager로 해 놓아서 그런 것 같다. 나중에 우분투로 부팅해서 확인해 보니, NVRAM 정보가 reset 되어 있었다. 즉, 예전에 우분투의 efibootmgr로 설정했던 부팅 순서 정보도 모두 사라졌다.

또한,  부팅시 Option키를 누르고 우분투를 선택하면 grub> prompt로 떨어지고 거기서 아무 것도 할 수 없는 상태가 된다.

해결 방법

먼저, Windows로 로그인 한 후에 Boot Camp 제어판에서 "Mac OS X로 부팅" 설정 후 재부팅하면 이후부터는 Mac OS X로 부팅한다. 이제, Mac OS X로 재부팅 후, 반드시 우분투 ESP(EFI System Partiton) 파티션의 EFI 폴더를 다시 복사해 주고 grubx64.efi에 대한 boot.efi 하드 링크를 다시 생성해 주어야 부팅시 Option키 눌러서 우분투를 선택하여 부팅할 수 있게 된다. 우분투 14.04에서는 grubx64.efi 대신 shimx64.efi로 boot.efi 하드 링크를 생성해도 부팅이 잘 됐었는데 Bug 때문인지 부팅시 오류가 생긴다.

즉, Mac OS X 터미널에서 아래와 같이 해 주면 된다.

$ sudo mkdir /mnt
$ sudo mount -t msdos /dev/disk0s1 /mnt

$ cd /Volumes/MDATA
$ sudo rm -rf ./EFI/ubuntu/
$ sudo cp -R /mnt/EFI/ubuntu ./EFI/

$ sudo ln -f /Volumes/MDATA/EFI/ubuntu/grubx64.efi /Volumes/MDATA/System/Library/CoreServices/boot.efi

우분투 14.10에서 Security 관련해서 Grub이 뭔가 바뀐 때문인지는 확실하지 않다. 어쨌든, 우분투 재설치할 때 마다 이 작업을 해야하는 불편함이 생겼다. rEFInd를 Mac OS X 파티션에서 사용할 경우에 Mac OS X가 upgrade 될 때마다 rEFInd를 재설치해야 하는 번거로움과 비슷한 일이다.

Mac 사용자 들을 위한 권장 사항

Mac에서 Multi-OS를 사용하는 사용자들은 안전을 위해 boot manager로 rEFInd를 같이 사용하는 것이 좋겠다.

2014/10/30

Ubuntu 14.10 Clean Install


지난 주 말에 우분투 14.10이 출시되었다. 이번 버전은 데스크탑 보다는 서버 쪽의 Upgrade 내용이 주를 이루는데 Cloud Computing 관련 Upgrade가 많다. 데스크탑 쪽에서는 Mir와 Unity 8의 개발이 진행 중인데 내년이나 내 후년 쯤에야 일반 사용자들이 쓸만할 정도가 될 것이다. 그러다 보니 별로 Upgrade하고 싶은 생각이 들지 않았는데 나이가 들수록 밀려오는 귀차니즘 타파 차원에서 iMac에 설치된 우분투를 Clean Install 하기로 했다.

Clean Install vs. Upgrade

우분투 버전업할 때마다 고민하는 부분인데 경험상 Clean Install이 낫다. 설치 시간으로 보면 둘다 비슷하다고 볼 수 있다. Upgrade하면 1시간 반에서 2시간 정도 지가 알아서 자동 Upgrade 해 주니까 편리한 측면과 기다리는데 따른 지겨움이 있는데, 뭔가 문제가 생겼을 때 원인을 파악하기 어렵다. Clean Install의 경우에는 우분투 설치시간 자체는 10분 정도 밖에 걸리지 않지만 데스크탑 환경도 새로 설정해 주어야 하고, 자주 쓰는 프로그램들도 다시 새로 설치하고 환경 설정도 다시 해 주어야 한다. 결국 전체 시간은 비슷하고 Clean Install을 할 경우 사용자가 세세히 신경을 써야 할 부분이 많다.

뜬금 없지만 Mac OS X나 iOS의 자동 Upgrade는 매우 훌륭한 편이다. 문제가 거의 생기지 않더라는 것인데 우분투 자동 Upgrade는 뭔가 되던 것이 안되는 일이 꼭 생긴다.

Clean Install을 잘 하기 위해서는...

평소에 자주 쓰는 프로그램들에 대해 설정 변경 사항을 기록하거나 백업 받아 놓는게 좋다. 설치시에도 설치 순서나 과정을 정리해 둘 필요가 있고 이 글도 그런 차원이다. 그리고, 최초 OS 설치시에 사용자 데이터 파티션과 OS 파티션은 반드시 분리해 두는 것이 좋은 습관이다. OS만 다시 설치하면 되기 때문이다.

Clean Install을 위한 사전 준비

우분투가 이미 설치되어 있는 상황에서 Clean Install 할 경우에 가장 빠르고 쉬운 방법은 하드 디스크에 저장된 우분투 설치 iso 파일로 부팅해서 설치하는 것이다. USB 메모리도 필요 없다. "하드디스크의 우분투 설치 iso로 우분투 설치" 게시물을 그대로 따라가면 된다. 14.10을 설치하면서 내용 중에 일부 오류가 있어서 수정하였다. Grub 부트 메뉴 엔트리에서 iso 파일 경로만 자신의 환경에 맞게 수정해 주면 된다.
menuentry "HDD Ubuntu 64-bit iso" {
   set isofile="/boot-isos/ubuntu-14.10-desktop-amd64.iso"
   loopback loop (hd0,9)$isofile
   linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject
   initrd (loop)/casper/initrd.lz
}
이제 우분투를 새로 설치하기 위해서 하드디스크의 우분투 설치 iso로 부팅한다. Grub 메뉴 중에 위에 새로 추가한 "HDD Ubuntu 64-bit iso"를 선택한 후, 다시 "Try Ubuntu without installing" 메뉴를 선택해서 우분투 live CD 환경으로 부팅한다. 부팅하고 나서 아래 스크린 샷에서 보듯이 두 가지만 해 주면 된다. 즉, 사용자 Data를 백업 받고 나서 사용자 Data 파티션을 unmount 해 주는 것이다.


기존 우분투 환경에서 사용자 aaa의 폴더는 /home/aaa 였고, 우분투 OS와 별개의 파티션인 /dev/sda9를 사용하고 있었다. 위의 스크린샷에서 우분투 설치 iso 파일도 같은 파티션에 복사해 놓았기 때문에 - 즉, 기존의 우분투 환경에서 /home/boot-isos 폴더 사용 - 하드디스크의 iso로 부팅하면 자동으로 /dev/sda9 파티션을 /isodevice 폴더에 mount 시켜 놓고 있음을 알 수 있다.

먼저, 아래와 같이 사용자 폴더에 사용자 데이터가 있기 때문에 폴더를 옮겨 백업을 받았다. 새로 우분투 설치시에도 동일한 사용자명을 사용할 것이기 때문이다.

$ sudo mv aaa aaa-14.04

그 다음은, 우분투 설치시에 기존의 우분투 OS 파티션을 포맷할 것이기 때문에 해당 디스크가 있는 파티션은 모두 unmount 해야만 파티션 테이블을 수정하여 설치를 진행할 수 있기 때문에 아래의 명령을 반드시 해 주어야 한다. USB 메모리로 설치할 경우에는 USB와 하드디스크가 분리된 물리적 장치이기 때문에 이 과정이 불필요하지만 여기서는 하드디스크의 iso로 설치하기 때문에 반드시 필요한 작업이다.

$ sudo umount -l /isodevice

우분투 14.10 설치

이제 바탕환면의 "Install Ubuntu 14.10" 아이콘을 선택해서 우분투 설치를 진행한다.이 과정은 일반적인 우분투 설치 과정과 동일하다. 다만, 기존의 우분투 OS 파티션만 새로 포맷하고 사용자 파티션만 다시 잡아 주면 된다. 기존에 사용했던 swap 파티션이나 UEFI 모드로 설치 시 사용하는 EFI System Partition(ESP) 들은 자동으로 우분투 설치 소프트웨어가 재사용하도록 설정한다. 설치 과정을 따라 아래 스크린샷 들을 참고하면 된다.

맨 처음 설치 언어 선택이 나오는데, "한국어"로 해도 되고 "English"로 해도 된다. 습관상 영어로 설치한다.


인터넷 속도가 빠르지 않다면 인터넷에 연결하지 않고 설치하면 설치시간이 10분도 안걸린다.


 이제 우분투 설치 파티션을 지정해야 하는데 아래와 같이 "Something else" 를 선택한다.


 아래와 같이 우분투를 설치하고 사용할 파티션을 선택하는 화면이 나온다.


먼저, 기존에 설치된 우분투 파티션을 선택해서 포맷해야 한다. 아래에서 /dev/sda8을 사용하고있었다. 이 파티션을 선택한 후, [Change] 버튼을 선택한다.


아래와 같이 우분투 OS 파티션을 포맷하도록 check해 주어야 한다. Mount 위치는 당연히 "/"이다.


그 다음은 사용자 데이터가 있는 /home 파티션을 지정한다. 나중에 사용자명(aaa)을 지정하면 이 파티션에 새로 /home/aaa 폴더를 만들 것이다. 우분투가 이 파티션을 사용하도록 하기 위해서 다시 [Change] 버튼을 선택한다.


이 파티션은 사용자 데이터가 들어 있는 파티션이므로 당연히 절대 포맷하면 안된다. Mount 위치만 /home으로 지정해 주면 된다.


추가적으로, 현재 /opt 파티션도 별개로 사용자 데이터 용도로 사용하고 있지만 /home 파티션과 동일하게 /opt 파티션을 우분투가 사용하도록 지정하면 되기 때문에 스크린샷은 생략한다.

우분투가 사용할 파티션을 모두 선택한 후의 스크린 샷을 아래에 보였다.


[Install Now] 버튼을 선택하면 아래와 같이 디스크에 Write 할 것인지 물어 보고,


아래와 같이 시간대 설정으로 넘어 간다. 설치 언어는 영어지만 시간대를 Seoul로 선택하면 한글 언어 팩을 자동으로 설치한다. 사실, 이건 좀 문제가 있다. 미국 사람이 서울에 거주할 수도 있고, 한국 사람이 미국에 살 수도 있기 때문이다. 그 다음 화면이 키보드를 선택하는 것인데 키보드를 Korean으로 선택했을 때 한글 언어팩을 자동설치하는게 설치 프로세스상 맞는게 아닌가 한다.


그리고, 키보드 설정에서 Korean을 선택해 준다. 노트북인 경우 101/104 키를 선택하면 된다. 여기서도 우분투 한글 문제에 대해 나중에 별개로 글을 올릴 예정이지만, ibus에서 한글을 사용하기 위해서는 설치 후에 "Korean(Hangul)" input source를 반드시 추가해야 한다. 여기서 Korean 키보드를 선택하면 자동으로 한글 언어팩을 설치하도록 하고, "Korean(Hangul)" input source도 같이 추가해 주면 되지 않나 싶다.


이제, 아래와 같이 기존 우분투에서 사용했던 동일한 사용자(aaa)를 추가한다. 컴퓨터 이름도 동일한 이름으로 지정해 주면 된다.


사용자 설정까지 마치면 본격적으로 우분투를 설치하기 시작한다.


설치를 끝내고 나서 새로운 우분투 14.10으로 재부팅하면 된다. 참고로, 여기에 있는 화면들은 우분투 live CD의 Screenshot 앱으로 캡춰해서 ~/Pictures 폴더에 저장해 놓은 것들이다. 그런데 재부팅하면 우분투 live CD 환경은 RAM에서 실행되고 있는 것이기에 모두 사라져 버린다. 터미널을 띄워서 사용자 파티션을 마운트해서 이미지들을 모두 하드디스크로 옮기고 나서 다시 unmount 해 준 후에 아래 화면에서 [Restart Now] 버튼을 선택하면 된다.


우분투 14.10 드라이버 설치

사실, iMac에서 우분투 14.10을 설치하고 나서 우분투로 부팅하지 못하는 사태가 발생했는데, iMac과 관련된 우분투 14.10 이슈에 대해서는 이 글의 주제에서 벗어나기 때문에 별개로 "Mac에 Ubuntu 14.10 설치 후 부팅 이슈"를 참고하면 된다. 참고로, 현재 iMac에는 Windows 8과 Mac OS X가 같이 설치되어 있다.

또한, 영문으로 우분투 14.10을 설치한 탓인지 ibus-hangul이 제대로 동작하지 않는 문제도 생겼다. 이것 역시 별개로 "Ubuntu 14.10 ibus 설정 및 한글 이슈"를 참고하면 된다.

우분투를 새로 설치 한 후 가장 먼저 해야 할 일은 하드웨어가 제대로 동작하도록 드라이버를 설치하는 일이다. 

iMac의 경우에는 우분투 설치할 때마다 WIFI가 동작하지 않는다. 하드디스크에 저장된 우분투 설치 iso 파일을 Archive Manager로 열어서 dkms와 bcmwl-kernel-source 패키지를 설치해 주어야 한다. 파일의 위치는 아래와 같다. 아래 파일을 double click 하면 설치할 수 있다.
  • dkms: /pool/main/d/dkms/dkms_2.2.0.3-1.1ubuntu5_all.deb
  • bcmwl-kernel-source: /pool/restricted/b/bcmwl/bcmwl-kernel-source_6.30.223.248+bdcom-0ubuntu1_amd64.deb
NVIDIA 드라이버는 nouveau 드라이버가 정상 동작하기 때문에 굳이 설치할 필요는 없지만, 이전 게시물을 참고하면 된다.

우분투 소프트웨어 Upgrade

우분투는 새 버전이 출시되고 나서도 버그 fix를 계속하기 때문에 소프트웨어 Upgrade를 반드시 해 주는 것이 좋다. 한글 언어팩이 설치된 경우에는 저장소 서버가 자동으로 KAIST FTP로 지정되어 있는데 [System Settings] > [Software Updates] > [Ubunt Software] > [Download from:] 에서 "Main Server"로 임시 교체해 주는 것이 좋다. 그리고 나서,

$ sudo apt-get update
$ sudo apt-get upgrade

사용자 데이터 복원

앞서 언급한 바 있듯이 우분투 14.10으로 부팅하면 aaa 사용자에 대한 /home/aaa 폴더가 새로 만들어 졌다. 설치 전에 백업 받아 놓은 /home/aaa-14.04의 내용물들을 /home/aaa로 옮겨야 한다. 단순히, /home/aaa 폴더를 삭제하고 /home/aaa-14.04 폴더를 /home/aaa로 옮기면 안된다. 왜냐하면 사용자 폴더에는 이전 버전의 우분투 환경에서 설정했던 정보들도 같이 저장되어 있기 때문에 Clean Install이라는 의미가 퇴색된다. 실제로 해봤더니 당장 작업 공간이 작동하지 않는다. GUI 환경의 데스크탑 설정이나 각종 프로그램 설정들이 새 버전에서의 설정과 다르기 때문에 발생할 수 있는 문제인 것이다.

먼저, 우분투가 기본으로 제공하는 폴더들 부터 옮겨와야 한다. 예를 들어 ~/Documents 폴더는새로 설치하면 비어 있지만 기존에 내가 작성했던 문서들을 거기에 저장해 놓았었다. 아래의 명령으로 한번에 대체할 수 있다.

 $ for i in Desktop Downloads Pictures Templates Documents Music Public Videos; do (rmdir ~/"$i"/) && (mv "/home/aaa-14.10/$i" ~/); done

그 다음은, 기존의 사용자 폴더에 내가 만들어 놓은 폴더나 파일들을 옮겨 온다. 아래 명령으로 한방에 끝~!

$ mv /home/aaa-14.04/* ~/

대부분의 우분투 데스크탑 설정이나 애플리케이션 설정 폴더/파일 들은 "."으로 시작하기 때문에 위의 명령으로 "."으로 시작하는 폴더/파일 들은 자동 제외된다. 물론, 드물게 일부 애플리케이션의 경우 "."으로 시작하지 않는 폴더/파일을 사용하고 있다면 다시 /home/aaa-14.04로 원위치 시켜 놓는게 좋다. 참고로 "."으로 시작하는 Unix/Linux 파일들은 숨겨져 있어서 "ls -a" 명령으로 볼 수 있다.

추가적으로 터미널을 자주 사용하다 보니 .bashrc 파일을 빨리 옮겨 오는 것이 좋다.

$  mv /home/aaa-14.04/.bashrc ~/

우분투 데스크탑 환경 설정

사용자 데이터를 복원하고 나서 해야할 일은 우분투 데스크탑 환경을 예전에 쓰던대로 맞추는 일이다. ibus 한글 설정, 데스크탑 한글폰트 설정, 배경화면 교체, Unity 환경 설정, 자주 사용하는 앱을 Launcher에 등록하기 등등을 수작업으로 해주어야 한다. 

한글 폰트설정은 Unity Tweak Tool을 설치해서 폰트를 한글 폰트로교체해 주면 된다. 유니티 환경 설정은 이전 게시물을 참조하면 된다. ibus 한글 설정에 대해서는 "Ubuntu 14.10 ibus 설정 및 한글 이슈"에 정리했다.

자주 사용하는 소프트웨어 설치 및 설정

자주 사용하는 소프트웨어는 개인 별로 다르기 때문에 여기서는 자주 사용하는 몇개 소프트웨어에 대해서만 언급한다.

Google Chrome

크롬은 구글에서 따로 다운로드 받아야 한다. 검색해서 다운로드 받으면 된다. 설치후에 자동으로 저장소가 등록된다. 중요한 것은 이전에 사용하던 bookmark나 plug-in을 옮겨 오는 일이다. 구글 크롬을 설치하고 나서 크롬을 실행하기 전에 아래와 같이 해 주면 된다.

$ mv ~/.config/google-chrome ~/.config/org.google-chrome
$ mv /home/aaa-14.04/.config/google-chrome ~/.config/

Virtual Box

버추얼 박스도 Oracle 버추얼 박스 홈페이지에서 하라는 대로 따라해서 설치하면 된다. 저장소를 추가하고 설치하는 것이 좋다. 단, 아직 우분투 14.10저장소가 없으므로 trusty(14.04) 버전 저장소를 이용하면 된다. 설치 후, 이전에 사용하던 설정을 옮겨 오는 것이 중요하다.

$ mv /home/aaa-14.04/.VirtualBox ~/

기타 소프트웨어

아래는 우분투 설치 후 습관적으로 설치하는 소프트웨어 들이다. 이전 우분투 환경에서 따로 설정했던 것들이 있다면 설치 후에 위의 예를 참조하여 해당 소프트웨어가 사용하는 폴더나 파일을 옮겨 주면 된다.

$ sudo apt-get install gparted synaptic dconf-tools
$ sudo apt-get install compizconfig-settings-manager
$ sudo apt-get install ghex deluge vlc
$ sudo apt-get install valgrind exuberant-ctags cscope

Unity Desktop이나 Gnome Desktop 환경에서 KDE application 들을 설치할 때는 불필요한 KDE 파일들이 설치되지 않도록 아래와 같이 옵션을 주는게 좋다.

$ sudo apt-get install --no-install-recommends kdiff3 kchmviewer

2014/10/07

Ubuntu USB WIFI adaptor


이전 글에서 아이맥에서 WIFI 드라이버로 Broadcom proprietary driver를 사용하면 된다고 했었다. 모델은 iMac13,2에서 WIFI는 Broadcom BCM4331을 사용하고 있다. 그런데, 우분투에서 가끔씩 네트워크 접속이 잘 안되거나 끊기는 문제가 있다. chrome에서 확인해 보면 웹사이트 접속시 아래 상태바에 Resolving host...라는 메시지가 뜨고 접속이 안될때가 종종 생긴다.

그동안 불편한 대로 참고 써왔는데 오래 전에 Anygate USB WIFI adaptor를 사놓고 쓸일이 없어서 보관하고 있는 것이 생각이 났다. 구형이라 IEEE 802.11bg까지만 지원된다. 그런데 어차피 Broadcom 드라이버도 우분투에서는 IEEE 802.11n을 지원하지 않기 때문에 속도는 매한가지다. 네트워크 접속의 안정성이 더 중요한 문제라서 이 놈을 우분투에서 사용해 보기로 하였다.

우선 Anygate 드라이버 구글 검색을 해보니 안잡힌다. 아래와 같이 리눅스 드라이버 명을 알아내야 한다. isl3887이다.

$ lsusb | grep -i wireless
Bus 003 Device 002: ID 0cde:0015 Z-Com XG-705A 802.11g Wireless Adapter [Intersil ISL3887]
구글링해 보니, linux-firmware-nonfree 패키지를 설치하고 p54usb 모듈을 사용하면 된다고 한다. 하지만, 아래 명령으로 확인해 보면, 우분투 14.04에는 이미 패키지도 설치되어 있고 p54usb도 이미 로딩되어 있다.

$ dpkg -l | grep linux-firmware-nonfree
$ lsmod | grep p54usb

아래 두 가지 명령으로 WIFI 드라이버가 정상 작동하는지 알 수 있는데, wlan0는 이미 사용하고 있으니 wlan1이 잡혀야 하는데 안잡힌다.

$ iwconfig
$ ifconfig

조금 더 찾아보니 debian wiki에서 해결책이 나왔다.

$ sudo -i
$ wget https://daemonizer.de/prism54/prism54-fw/fw-usb/2.13.25.0.lm87.arm --no-check-certificate
$ mv 2.13.25.0.lm87.arm /lib/firmware/isl3887usb
$ modprobe -r p54usb && modprobe p54usb

$ sudo reboot

위와 같이 firmware를 받아서 모듈을 다시 로딩해야 한다. 그런데, 재부팅까지 해 주어야만 잡힌다.
재부팅 후 iwconfig 해 보면 아래와 같이 wlan1이 잡힌다.

$ iwconfig
wlan1     IEEE 802.11bg  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=14 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          
eth0      no wireless extensions.

lo        no wireless extensions.

wlan0     IEEE 802.11abg  ESSID:"AAA"  
          Mode:Managed  Frequency:2.462 GHz  Access Point: 00:00:00:00:00:00   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
이제 Unity 상단 패널의 WIFI 아이콘을 클릭해서 SSID를 선택하고 비밀번호를 입력해서 Access Point에 접속하면 된다.

일단, 동작은 잘되는데 안정성 문제는 몇일 동안 써봐야 확인될 것이다. WIFI 안정성 문제가 WIFI 드라이버 때문인지도 사실 확실하지는 않다.

추가적으로, 기존의 Windows BCM4331 드라이버를 가지고 ndiswapper로 firmware 모듈을 로딩할 수 있는 방법도 있는데 나중에 시도해 볼만하다.


참고 사이트

https://wiki.debian.org/prism54#p54usb
https://wiki.sabayon.org/index.php?title=Using_Broadcom_wireless_and_ndiswrapper_w/Sabayon_miniEd

2014/10/02

Ubuntu 14.10 beta2 GUI login


우분투 14.10 beta2나 현재 daily-build iso 이미지로 설치하면 GUI 환경, 즉, X-window로 로그인이 안되고 콘솔 모드로만 로그인이 된다. 참고로, Virtual Box에 설치한 경우에는 부팅 후 먹통인 것처럼 화면에 아무것도 나타나지 않는다. 이 때에는 <Host>+<F1>키로 콘솔 로그인이 가능하다. Virtual Box에서는 <Host> key가 <Alt>+<Ctrl> key를 대신한다.

이 경우에 아래와 같이 수동으로 lightdm을 실행하여 Unity Desktop으로 로그인할 수 있다.

$ sudo lightdm start

실행 후, Virtual Box에서는 <Host>+<F7>키로 GUI 환경으로 로그인 할 수 있다.

또 다른 문제는 로그인 후, Unity Desktop에서 뭘 하려고 하면 아래와 같이 인증 창이 자꾸 pop-up 된다. 아래의 예는 배경화면을 바꾸는데도 인증을 요구하고 있다.


init가 필요한 프로세스 들을 제대로 구동하고 있지 않고 있다는 생각이 들어서 예전에 얼핏 upstart를 버린다는 기사를 본게 생각이나서 구글링했더니 추측이 맞았다. 이 모든 문제의 근원은 Ubuntu가 upstart를 버리고 systemd로 가는 과정에서 발생한 문제이다. 아래와 같이 /etc/default/grub 파일을 수정하여 Grub에서 kernel 파라미터로 systemd를 사용하도록 하면 모든 문제가 해결된다. nano 등 편집기를 이용하여 아래 부분과 같이 수정한다.

$ sudo nano /etc/defaul/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash init=/lib/systemd/systemd"
$ sudo update-grub
$ sudo reboot

위의 문제는 14.10 정식 버전이 나오면 upstart를 완전히 걷어냄으로써 해결될 것으로 기대한다.


참고 사이트

https://wiki.ubuntu.com/systemd
http://www.zdnet.com/after-linux-civil-war-ubuntu-to-adopt-systemd-7000026373
http://www.reddit.com/r/linux/comments/132gle/eli5_the_systemd_vs_initupstart_controversy

2014/09/27

uim 벼루 Qt5 immodule build


우분투 uim 기본 패키지에는 Qt5 immodule이 들어 있지 않아서 Qt5 애플리케이션에서 한글 입력이 안된다. uim 사이트에 가보니 2013/6/30일자 uim-1.8.6 소스가 최신인데 받아 보니 Qt5를 지원하지 않는다. 문서에도 Qt5에 대한 언급이 전혀 없다. 혹시나 해서 github에서 소스를 받아 보니 Qt5 immodule 소스가 있었다. Qt5 모듈을 build하는 문서가 없어서 좀 헤매야 했는데 헤맸던 것들을 정리한다.

결론은, uim Qt5 모듈을 사용하면 Qt5 애플리케이션에서도 한글입력은 잘 되는데, 안정성 문제가 있다. 한글 입력 문제에 관한 한 uim이 ibus보다 좋아 보인다.

uim Build 및 설치

uim 설치 가이드를 따라가면, 소스를 build하기 위해서 아래의 tool 들이 필요하다.

$ sudo apt-get install intltool
$ sudo apt-get install librsvg2-bin libtool ruby git

build에 필요한 header 파일들도 있어야 하고...

$ sudo apt-get install libanthy-dev libgtk2.0-dev libgtk-3-dev libqt4-dev

그런데, Qt5는 우분투 패키지 구성이 꽤 복잡하다. 한마디로 libqt5-dev가 없다. 일단, 아래 정도가 필요해 보인다.

$ sudo apt-get install qtbase5-dev qtbase5-private-dev qt5-default qtdeclarative5-dev

이제 다시 가이드 대로, 소스를 github에서 받아서 build하고 설치까지 문제가 없다. 아, 도중에 폴더 권한이 없다는 오류가 발생했었다. 해당 폴더(/usr/plugins)를 만들어 주고 사용자 권한을 주면 해결된다. Qt5 모듈이 엉뚱한 폴더를 중간 폴더로 사용하고 있었다.

그리고, ./uim/qt5/immodule/quimplatforminputcontext.cpp 파일 윗부분에 debug 사용하도록 define이 있는데 주석 처리하는게 좋다.

$ git clone https://github.com/uim/uim.git
$ cd uim
$ ./make-wc.sh --with-qt5 --with-qt5-immodule
$ make
$ sudo make install

위와 같이 해서 설치하면 /usr/local 하위 폴더들에 uim 파일들이 분산된다. 단, Qt5 모듈은 Qt5 폴더 (/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts)에 설치된다.

Qt5 모듈은 가야할 위치에 이미 가 있어서 Dynamic loading 문제가 없다. 그런데, GTK 모듈들은 immodules.cache에 등록해 주어야 한다. GTK2는 별로 쓸일이 없을 것 같아서 GTK3 모듈만 아래와 같이 등록하였다.

$ /usr/lib/x86_64-linux-gnu/libgtk-3-0/gtk-query-immodules-3.0 /usr/local/lib/gtk-3.0/3.0.0/immodules/im-uim.so >> /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules.cache

uim 자동 실행

시스템 설정 가이드에 보면 ~/.xinitrc나 ~/.xsession에 아래의 내용을 넣어 주면 된다는데 잘 안되었다.
export GTK_IM_MODULE=uim
export QT_IM_MODULE=uim
export QT4_IM_MODULE=uim
export XMODIFIERS=@im=uim
/usr/local/bin/uim-xim &
그래서, 우분투의 im-config를 사용하기로 하였다. 먼저, ~/.xinputrc에 아래 내용을 등록해 주고,
run_im uim
/usr/share/im-config/data/24_uim.rc 파일을 수정해서 /usr/local 폴더 위치를 잡아 주었다. 그리고 나서 재로그인하면 uim이 잘 기동된다.

uim Qt5 모듈의 문제점

Qt5 애플리케이션에서 한글입력은 아무 문제없다. 심지어 ibus의 Qt5 애플리케이션에서 발생하는 한글입력 문제도 없다. 그런데, 공식 사이트에 Qt5 모듈이 없는 이유를 알게 되었다. 불안정하기 때문이다. 일단, 두어가지 문제를 발견했다.
  • Qt5 애플리케이션을 새로 실행할 때마다 uim-candwin-qt5 프로세스 수가 계속 증가함
  • 애플리케이션을 중지하면 프로세스가 좀 줄어 들지만 다시 새로운 프로세스가 생김
  • Qt5 애플리케이션을 쓰다 보면 컴이 느려지는데 uim-helper-server 프로세스가 CPU를 거의 100% 가까이 잡아먹고 있음

참고 사이트

https://code.google.com/p/uim/wiki/InstallUim
https://code.google.com/p/uim/wiki/UimSystemConfiguration

2014/09/25

하드디스크의 우분투 설치 iso로 우분투 설치


(2014/10/29 오류 수정)

Facebook 우분투사용자모임에 USB 플래시 메모리 없이 하드디스크(HDD)로 우분투를 재설치 할 수 없느냐는 질문이 있어서 겸사겸사 정리해 보기로 했다. 이미 우분투가 설치되어 있는데 우분투를 업그레이드 하기 위해 Clean Install 하고자 한다면 굳이 USB를 사용하지 않아도 되기 때문에 매우 편리한 우분투 설치 방법이다.

우분투 설치를 USB를 사용하지 않고 하드디스크를 이용해서 설치하는 것은 우분투 설치 USB 만들기를 응용하면 쉽게 할 수 있다. 하드디스크를 USB라고 생각하면 되기 때문이다. 다만, 하드디스크에 Grub이 설치되어 있지 않다면 USB가 반드시 필요하기는 하다. 여기서는 우분투가 이미 설치되어 있는 경우에 하드디스크에 저장된 우분투 설치 iso로 우분투를 재설치하는 방법이다. Grub이 당연히 설치되어 있기 때문이다.

우분투를 재설치하려면 우분투 홈페이지에서 내려 받은 우분투 설치 iso 파일은 우분투를 새로 설치할 파티션과는 다른 파티션에 있는 것이 좋다. 평소에 OS와 데이터 파티션을 분리해서 사용하는 것은 여러모로 장점이 많다. Windows를 같이 사용하고 있다면 Windows 파티션에 iso 파일을 복사해서 사용해도 된다. 파티션이 하나 밖에 없다면 parted로 파티션을 분리하는 것이 좋고, 그게 어려우면 iso 폴더를 만들어서 우분투 설치 시에 덮어쓰기로 설치할 수도 있기는 하다.

우분투 설치 iso 파일 위치 확인

기존에 데이터 파티션은 /home에 마운트해서 사용하고 있고 aaa라는 사용자의 Downloads 폴더에 우분투 설치 iso를 내려 받았다고 가정한다. 향후에도 우분투 iso 이미지를 가지고 하드디스크에서 부팅해서 설치할 경우를 대비해서 아래와 같이 /home/boot-isos 폴더를 만들고 사용자 권한을 부여해 두면 좋다. 내려 받은 iso 이미지들은 모두 /home/boot-isos 폴더로 몰아 넣는다.

$ sudo mkdir /home/boot-isos
$ sudo chown aaa:aaa /home/boot-isos
$ mv ~/Downloads/*.iso /home/boot-isos

이제, /home이 어느 파티션인지 알아야 한다. 아래와 같이 /dev/sda9 파티션임을 알 수 있다.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda8        92G   22G   65G  26% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            3.9G  4.0K  3.9G   1% /dev
tmpfs           793M  1.4M  791M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G   17M  3.9G   1% /run/shm
none            100M   76K  100M   1% /run/user
/dev/sda11      145G  129G  8.7G  94% /opt
/dev/sda9        92G   29G   59G  34% /home
/dev/sda1       197M   48M  150M  25% /boot/efi

우분투 설치 iso 파일에 대한 Grub boot menu entry 등록

Grub에서 우분투 설치 iso로 부팅하려면 Grub boot entry를 새로 추가하되, 하드디스크 파티션 정보와 파일 경로를 지정해 주어야 한다. 위에서 /dev/sda9 파티션이니까 디스크의 9번째 파티션이다. 디스크는 첫번째 하드디스크이다. 즉, 아래 menu entry의 (hd0,9)에 해당한다. USB 메모리로 부팅할 경우에도 USB 메모리가 첫번째 디스크가 되므로 hd0이다. 또한, iso 파일 경로는 파티션을 기준으로 하기 때문에 /home/boot-isos/...가 아니라 /boot-isos/ubuntu-14.04.1-desktop-amd64.iso가 됨에 유의할 필요가 있다.
menuentry "HDD Ubuntu 64-bit iso" {
   set isofile="/boot-isos/ubuntu-14.04.1-desktop-amd64.iso"
   loopback loop (hd0,9)$isofile
   linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject
   initrd (loop)/casper/initrd.lz
}
위의 내용을 nano등의 편집기를 사용하여 /etc/grub.d/40_custom 파일 맨 끝에 추가한다.

$ sudo nano /etc/grub.d/40_custom

/boot/grub/grub.cfg를 새로 생성하기 위해서는,

$ sudo update-grub

이제 재부팅 해서 Grub 메뉴 중 위에 만든 "HDD Ubuntu 64-bit iso" 메뉴를 선택한 후, 다시 "Try Ubuntu without installing" 메뉴를 선택해서 우분투 live CD 환경으로 부팅하면 iso 이미지로 부팅해서 우분투를 설치할 수 있게 된다.

$ sudo reboot

우분투 설치 iso로 재부팅 후 우분투 설치전에 해야 할 일

우분투 14.10을 이 게시물 대로 하드디스크의 iso 이미지로 설치하다가 뭔가 빠졌음을 알게 되었다. 우분투 설치 파일을 마구 복사하면서 빨리 설치가 진행되어야 하는데  File System을 인식하지 못해 설치가 진행되지 않고 계속 멈춰 있는 증상이다.

설치 중에 파티션 테이블을 건드리는데 하드디스크의 iso 이미지를 사용하기 위해 하드디스크를 mount 상태로 두고 있으니 파티션 테이블을 수정할 수 없게 된다. 물론 설치 과정 중에 unmount 할지 물어보고 yes라고 해도 root 권한이 없으니 unmount가 안된다.

우분투 설치 icon을 click 하기 전에 <Ctrl>+<Alt>+<t>로 터미널을 띄워서 아래와 같이 umount 해주면 된다.

$ sudo umount -l /isodevice

ibus 기동 방지 및 uim 벼루 설치


우분투 14.04에서 ibus 대신 uim 벼루와 같은 다른 입력기를 테스트 해보려고 ibus를 삭제하면 불상사가 생기니 삭제하지 말고 ibus 프로세스만 기동되지 않도록 하는 방법을 찾을 필요가 있었다.

ibus를 삭제하면

우분투 14.04에서 ibus를 삭제하면 아래 스크린 샷과 같이 [시스템 설정] 메뉴가 대폭 사라지는 일이 생긴다.


원래의 [시스템 설정] 스크린 샷은 아래와 같다.


아래에서 알 수 있듯이 삭제 명령 실행시 ibus만 지워지는게 아니기 때문이다. 한마디로 ibus를 붙박이로 써라는 엉뚱하고도 고약한 패키지 dependency이다.

$ sudo apt-get remove ibus ibus-hangul
[sudo] password for aaa: 
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:
  libhangul-data libhangul1
Use 'apt-get autoremove' to remove them.
다음 패키지를 지울 것입니다:
  ibus ibus-hangul ibus-pinyin ibus-table ubuntu-desktop unity-control-center
  unity-control-center-signon webaccounts-extension-common xul-ext-webaccounts
0개 업그레이드, 0개 새로 설치, 9개 제거 및 0개 업그레이드 안 함.
이 작업 후 8,654 k바이트의 디스크 공간이 비워집니다.
계속 하시겠습니까? [Y/n] 
다시 복구하기 위해서 아래와 같이 하면 ibus와 ibus-hangul 두 개만 달랑 설치된다.

$ sudo apt-get install ibus ibus-hangul

아래와 같이하면 ibus도 같이 설치되고 [시스템 설정]도 원래의 상태가 된다.

$ sudo apt-get install ubuntu-desktop unity-control-center unity-control-center-signon webaccounts-extension-common xul-ext-webaccounts

로그인시 ibus 프로세스가 자동 시작 방지 및 uim 벼루 설치

ibus를 삭제하려던 원래 이유는 uim 벼루와 같은 다른 입력기를 테스트해 보기 위해서 였다.

예를 들어, uim/uim-byeoru를 아래와 같이 설치하고 나서,

$ sudo apt-get install uim uim-byeoru

[시스템 설정] > [언어 지원]에서 [키보드 입력기]를 uim으로 바꾸고 재로그인해도 ibus 프로세스들이 같이 떠 있다. 구글링해 보니 굳이 ibus를 지우지 않아도 ibus 프로세스가 로그인시 기동되지 않도록 하는 방법이 있었다.

$ gsettings set org.gnome.settings-daemon.plugins.keyboard active false

위와 같이하고 다시 로그인하면 더이상 ibus 프로세스가 기동되지 않는다.

추가적으로, 기존에 ibus 환경에서 <Shift>+<Space> 등의 키를 한영 변환키로 사용했는데 uim에서도 같은 키조합을 사용하려면 [시스템 설정] > [텍스트 입력창]에서 단축 키를 다른 키로 바꿔 주어야 한다. 단축 키에 대한 우선권이 거기에 있기 때문이다.

Unity 상단 패널의 키보드 indicator도 ibus에서만 사용하는 것이므로 안보이도록 설정하려면,

$ gsettings set com.canonical.indicator.keyboard visible false

uim에서 한영키를 등록하려면 uim-pref-gtk를 실행시켜서 [벼루 키 설정 1]에 한영키("hangul")를 추가해 주면 된다.

$ uim-pref-gtk

uim 벼루의 제약 사항

일단, 두가지 제약 사항이 있다. 하나는 Unity 상단 패널에 uim indicator가 등록되지 않아 한영 상태를 구분하기 어렵다는 것이고, 다른 하나는 Qt5 애플리케이션에서 한글입력이 안된다는 것이다.

참고로, Mint 17에서는 uim indicator가 정상 동작한다.

2014/09/24

btrfs Snapshot을 이용한 Roll-back


btrfs 파일시스템이 나온지도 꽤 됐지만 올해 처음으로 VirtualBox에 우분투 설치하면서 btrfs 를 기본 파일시스템으로 설정해서 설치해 보았다. 몇 달 써 봤는데 역시 가장 실용적인 장점은 Snapshot 기능이었다. Snapshot을 만들어 두었다가 불안정한 Software를 설치 후 문제가 생겨서 roll-back 할 때 실제로 매우 유용하게 써먹고 있다. btrfs 파일시스템은 지금도 리눅스 kernel 단에서 활발히 개선되고 있다.


btrfs 파일시스템 사용에 대한 고려 사항

Snapshot 기능 외에 나중에 몇가지 테스트 해 보고 싶은 것은 Subvolume 압축과 Sanpshot을 다른 Machine으로 ssh를 이용해 send/receive 하는 기능이다. 이외에도 서버 사용자라면 btrfs 파일시스템이 LVM을 대체할 수 있고 RAID 구성도 가능하며, Subvolume quota 기능도 유용할 수 있다.

btrfs 파일시스템이 장점만 있는 것은 아니다. 일단, Meta 정보를 따로 관리해야 하기 때문에 디스크 용량이 실제 데이터 용량보다 더 많이 소모될 수 있다. 실제로 Snapshot을 과도하게 사용하다보면 Meta Data 량이 과도하게 증가한다. 또한, 파일시스템 특성 상 디스크 사용량을 실시간으로 정확히 파악하기 어렵다. 서버 사용자라면 Disk full이 언제 발생할지 예측하기 어렵다. 기존의 df나 du와 같은 디스크 용량 정보는 거의 의미가 없다. 가능한 디스크 용량을 정확히 계산하기 위한 Tool을 만들려고 노력은 하고 있단다. 또한, 디스크 성능 이슈도 발생할 수 있다. 성능이 개선되고는 있지만 ext4 파일시스템에 비해 빠르지는 않은 듯하다. 이외에도 파일시스템 안정성은 이미 크게 개선이 된듯하다.

btrfs Subvolume

btrfs 파일시스템에서는 Subvolume 단위로 파일시스템을 관리할 수 있는데 Snapshot도 일종의 Subvolume이다. 또한, Subvolume은 폴더와 비슷하게 관리할 수 있는 장점이 있다. Subvolume 내에 또 다른 Subvolume을 생성할 수 있는 구조이다. Subvolume에 대해 mv나 rm도 가능하지만 rm을 직접 사용하는 것은 권장하지 않는다. Subvolume 간의 작업은 독립적이다. 즉, Subvolume 내에 하위 Subvolume이 있어도 상위 Subvolume의 Snapshot은 하위 Subvolume을 포함하지 않는다. 

우분투에서 설치시에 파일시스템을 btrfs로 선택해서 설치하면 @와 @home 두 개의 Subvolume을 자동으로 만들어 준다. @는 /(root) 파티션에 해당하고 @home은 /home 파티션에 해당한다. 즉, OS와 사용자 데이터를 Subvolume으로 나누어서 관리하도록 해준다. 그리고, 예전에는 Grub이 btrfs 파일시스템을 지원하지 않아서 /boot 파티션을 ext4 등으로 따로 만들어야 했던 문제는지금은 해결이 됐다. 참고로, Subvolume명 앞에 @를 사용할 필요는 없지만 @를 앞에 붙이는 것이 관리상 편리하다.

btrfs-tools

모든 btrfs 파일시스템 관리는 btrfs 명령으로 이루어지는데 우분투에서는 btrfs-tools 패키지에 들어 있다. 설치 시에 btrfs 파일시스템으로 지정하면 기본으로 btrfs-tools가 설치되지만, ext4 등의 다른 파일시스템으로 지정한 경우에는 별개로 설치해 주어야 한다. 참고로, ext2~4 파일시스템은 btrfs-tools를 이용해 btrfs 파일시스템으로 전환할 수 있고, 이렇게 변환된 btrfs 파일시스템을 다시 ext2~4 파일시스템으로 재변환 할 수도 있다. 다만, 원래부터 btrfs 파일시스템으로 우분투를 설치했다면 ext2~4 파일시스템으로의 전환은 불가능하다.

btrfs Subvolume Snapshot 만들기

우분투 처음 설치했을 때의 btrfs Subvolume은 아래와 같이 확인할 수 있다.

$ sudo btrfs subvolume list /
ID 258 gen 2987 top level 5 path @home
ID 286 gen 2988 top level 5 path @
우분투 OS 부분만 Backup 해 두기 위해 아래와 같이 @에 대해 @backup 이라는 Snapshot Subvolume을 아래와 같이 만든다.

$ sudo btrfs subvolume snapshot @ @backup

Snapshot을 이용한 Roll-back

이제 불안정한 Software를 설치했는데 문제가 생겨서 원래 우분투 OS 설치 상태로 돌아가고 싶으면 앞서 만든 스냅샷을 이용해서 아래와 같이 복원할 수 있다.

먼저, 파티션이 여러 개라면 / 폴더가 위치한 파티션을 알아 둘 필요가 있다. 아래에서 /dev/sda2임을 알 수 있다.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        19G   12G  5.5G  69% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            991M   12K  991M   1% /dev
tmpfs           201M  888K  200M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none           1001M  152K 1001M   1% /run/shm
none            100M   52K  100M   1% /run/user
/dev/sda2        19G   12G  5.5G  69% /home
/dev/sda1       197M  8.2M  189M   5% /boot/efi
아래와 같이 /dev/sda2를 마운트해서 roll-back 작업을 수행한다.

$ sudo mount /dev/sda2 /mnt
$ cd /mnt && ls -l
drwxr-xr-x 1 root root 226  9월 24 21:12 @/
drwxr-xr-x 1 root root 204  6월 13 01:32 @backup/
drwxr-xr-x 1 root root  12  6월 26 18:04 @home/
drwxr-xr-x 1 root root  58  6월 13 01:25 ubiquity-apt-clone/
drwxr-xr-x 1 root root   6  6월 13 01:25 var/
문제가 있는 @를 @problem이라는 Subvolume으로 옮기고 나서,

$ sudo mv @ @problem

@backup 스냅샷에 대한 스냅샷으로 다시 @를 만들어 roll-back 함으로써 @backup 스냅샷을 계속 보존할 수 있다.

$ sudo btrfs subvolume snapshot @backup @

이제 원복한 파일시스템을 사용하기 위해서 재부팅이 필요하다.

$ sudo reboot

재부팅 후, 모든 것이 정상임을 확인한 후에 문제가 됐던 @problem Subvolume을 삭제하려면,

$ sudo btrfs subvolume delete @problem

btrfs 명령어 축약

btrfs 명령이 너무 길기 때문에 사용하기 불편한데 아래와 같이 명령어를 단축할 수 있다.

subvloume = sub, snapshot = snap, filesystem = file, delete = del

예를 들어, 위에서 @backup Snapshot을 만들 때의 명령은 아래와 같이 해도 동일하다.

$ sudo btrfs sub snap @ @backup

사실은, 하위 명령어가 중복되지 않는 범위에서 하위 명령어들을 최대한 축약해도 된다. 즉, 위의 명령은 아래와 같이 해도 된다.

$ sudo btrfs su sn @ @backup

기타 btrfs 명령어

$ sudo btrfs filesystem show
Label: LRoot  uuid: 7f51f770-fe96-4f1f-860d-95215173b0f2
    Total devices 1 FS bytes used 11.00GiB
    devid    1 size 18.80GiB used 17.04GiB path /dev/sda2

Btrfs v3.12
$ sudo btrfs filesystem df /
Data, single: total=14.01GiB, used=10.33GiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, DUP: total=1.50GiB, used=691.88MiB
Metadata, single: total=8.00MiB, used=0.00
$ sudo btrfs filesystem defragment /


참고 사이트

https://btrfs.wiki.kernel.org

2014/09/04

Ubuntu WINE 한글 설정 및 iso 이미지/CD 교체


우분투에 WINE 1.7을 설치하고 나서 Windows Application에서 한글이 잘 보이도록 설정하는 법과 Game 등 두 개 이상의 CD를 사용해서 소프트웨어를 설치 해야 하는데 iso 이미지들을 사용하여 교체하는 법에 대해서 정리한다.

WINE 기본 환경 설정

먼저, ~/.bashrc 파일에 아래의 환경 변수들을 설정해 둘 필요가 있다. 64-bit 우분투를 사용하는데 Windows 소프트웨어가 대부분 32-bit이므로 여기에 맞춰 줄 필요가 있다.
export WINEARCH=win32           # WINE architecture for 32-bit
export WINEPREFIX=~/.wine32     # WINE default folder for 32-bit
export WINEDEBUG=-all           # disable WINE debug messages
export LANG=ko_KR.utf8          # 한글 입출력
WINE 기본 환경설정은 winecfg를 실행해서 바꿔주면 된다.

$ winecfg

[응용 프로그램] 탭에서 실행 환경의 윈도우즈 버전을 Windows NT 4.0과 같이 맞춰줄 수도 있고, [그래픽] 탭에서 [가상 테스크탑 흉내내기]를 선택하여 적절한 데스크탑 크기를 지정할 수 있다.

WINE Windows 프로그램에서 한글 설정

Windows 프로그램에서 한글 입출력을 사용하려면 기본적으로 위의 LANG 환경 변수를 ko_KR.utf8로 반드시 설정해 주어야 한다. ibus 환경에서도 한글 입출력은 잘 된다.

registry 편집기에서 한글 폰트를 바꾸거나 일부 애플리케이션에서 한글 글꼴이 네모로 보이는 문제를 해결하려면 "아무도안" 블로그 중 "Wine 1.7 한글 글꼴 설정"을 참고하면 된다. 

Windows용 카카오톡에서 한글 입력을 하려면 아래의 패키지를 winetricks로 설치하고 나서 카카오톡을 설치해야 한다.

$ winetricks gdiplus wmp10 reiched20

WINE 프로그램에서 iso 이미지를 이용한 CD 교체

주로 게임 소프트웨어 설치시 여러 장의 CD로 구성되어 있어서 CD를 교체하라고 할 때가 있다. 요즘은 CD 대신 iso 이미지를 마운트해서 사용하므로 WINE에서 iso 이미지를 교체할 필요가 있다. 첫 번째 iso 이미지에서 setup 실행은 문제가 없는데 CD 교체하라고 할때 winecfg의 [드라이브] 탭에서 CD 경로를 바꾸어 주어도 안된다.

d: 드라이브가 CD 드라이브라면, CD를 교체하라는 메시지가 나오면 아래와 같이 해주고 확인을 선택하면 된다.

$ cd ~/.wine32/dosdevices
$ ln -sf <iso 파일 명을 포함한 경로> d::

예를 들어, ~/iso 폴더에 iso 이미지 들이 들어 있다고 가정하면,

$ mkdir ~/iso/cdrom
$ mount ~/iso/CD_install_1.iso ~/iso/cdrom
$ wine ~/iso/cdrom/setup.exe

첫번째 iso 이미지에서 설치가 끝나고 두 번째 CD를 넣으라고 하면,

$ umount ~/iso/cdrom
$ mount ~/iso/CD_install_2.iso ~/iso/cdrom
$ cd ~/.wine32/dosdevices
$ ln -sf ~/iso/CD_install_2.iso d::
$ ls -l
lrwxrwxrwx 1 aaa aaa 30 Aug 16 19:29 d: -> /home/aaa/iso/cdrom/
lrwxrwxrwx 1 aaa aaa 41 Aug 16 19:36 d:: -> /home/aaa/iso/CD_install_2.iso
위의 예에서와 같이 d: 드라이브가 마운트 폴더인 ~/iso/cdrom 폴더에 소프트 링크되어 있고, d::는 d: 드라이브에 대한 실제 iso 이미지 파일의 소프트 링크가 되어야 한다.

2014/09/03

Windows와 Ubuntu에서 삼성 프린터 WIFI


삼성 복합기 프린터 SL-C463W에서 무선 공유기로 WIFI 연결을 해야하는데 시행착오 끝에 겨우 연결했다. 의외로 우분투에서는 오픈소스 드라이버로 쉽게 연결된다. 문제는 Windows에서 드라이버 설치 후 무선으로 인쇄가 안되었다. OS 설치할 때마다 발생하는 문제라 정리해 둔다. HP WIFI 프린터 들은 일반 TCP/IP 설정으로 잘 되는데 삼성 프린터는 잘 안되고 복잡하다. 참고로, 프린터에서 고정 IP를 지정하였다.

Windows에서 삼성 프린터 WIFI 연결

제어판에서 프린터 추가할 때 Local Printer 선택해서 TCP 포트에 프린터 IP 주소 넣어서 추가한다. Windows Update에서 Printer Driver를 가져오도록 하고나서 Samsung C460 드라이버를 설치한다. 기본 프린터로 설정하고 나서 Test Page 인쇄하면 잘되는 듯 싶지만 인쇄 오류가 발생한다.

삼성 사이트에서 SL-C463W 다운로드 페이지에 들어가면 소프트웨어가 있는데 Easy Wireless Setup이라는 놈이 있다. 이 놈을 내려 받아서 실행하면 프린터의 WPS 버튼을 누르라고 한다. 이걸 눌러 주면 WIFI 연결이 된다.

Ubuntu 삼성 프린터 WIFI 연결

위의 삼성 사이트에 Linux용 드라이버가 있는데 그걸 써도 되고, 오픈소스 드라이버를 써도 프린트하는 데는 문제없다.

[System Settings] > [Printers] > [Add] > [Select Device] > [AddSocket/HP JetDirect] 선택 후 오른 쪽의 [Location of network printer] > [Host]에 프린터 IP 주소를 지정하고, [Forward] > [Choose Driver] > [Select Driver] > [Select printer from database] > [Generic] > [Forward] 하면 [PCL 6/PCL XL] > [PCL 6/PCL XL Printer Foomatic/pxlcolor[en] (recommended)] 오픈소스 드라이버를 추천해 준다. [Forward] > [Describe Printer] > [Printer Name]에 프린터 명을 지정해 주면 프린터가 추가된다.

Test Page를 인쇄하려면 추가된 프린터를 선택해서 마우스 우클릭해서 [Properties] > [Settings] > [Print Test Page]를 선택하면 된다.

Kubuntu 한글 설정 및 ibus 사용


Kubuntu 14.04를 Virtual Box에 설치해 보았다. 쿠분투는 한글 사용 환경이 개판이다. 설치부터 한글이 깨져서 영문으로 설치해야 했다.

한글을 사용하기 위해서 해 주어야 했던 작업 들을 기억나는 대로 정리한다.

언어 추가

[System Settings] > [Locale] > [Laguage] 탭 > [Korean] 추가

나눔 폰트 설치

$ sudo apt-get install fonts-nanum fonts-nanum-coding fonts-nanum-extra
$ sudo fc-cache -fv

폰트 설치 후 나눔 폰트를 지정하기 위해서는 [System Settings] > [Apperance] > [Fonts] 에서 나눔 글꼴 선택

ibus 설치

$ sudo apt-get install ibus ibus-hangul

환경변수 설정

~/.bashrc 또는 ~/.profile에 아래 환경 변수 추가
export LC_ALL="ko_KR.UTF-8"
export LANG="ko_KR.UTF-8"
export LANGUAGE="ko_KR:ko:en_GB:en"

export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus

ibus를 KDE 시작시 기동하도록 추가

[시스템 설정] > [시스템 관리] > [시작 및 종료] > [자동 시작] > [데스크톱 파일] > [프로그램 추가] 에서 아래 두개 항목을 추가한 후 재 로그인 필요
ibus-daemon --xim -d
/usr/lib/ibus/ibus-x11
참고로, 원래는 --xim 옵션만 주면 ibus-x11이 떠야 하는데 안뜬다. Arch wiki에도 KDE 환경에 대해 비슷한 설명이 있다. 특히, LibreOffice 섹션을 참고할 필요가 있다.

ibus에서 한영키 사용 설정

$ ibus-setup

실행 후 [일반] 탭 > [다음 입력기] > [...] > [키 코드] 에 Hangul 추가 후 [확인]

기타 참고 사항

쿠분투 14.04 KDE에서 locale이 꼬이는 버그가 있다.

2014/09/02

Dell 복구 파티션을 이용한 Windows 7 복구


Windows 8.1로 Upgrade 했던 Dell PC가 있는데 Windows 7으로 다운그레이드 해 달라는 가족의 압력에 구글링을 통해 복구에 성공했다. 다시 복구할 일이 생길지 모르니 잊어 버리기 전에 정리한다.

imagex.exe 프로그램 준비

Windows AIK iso 이미지를 내려 받아서 설치하면(Windows 8.1에서) imagex.exe 프로그램이 있는데, 64-bit PC이므로 amd64 폴더에 있는 것을 사용한다. USB나 D: 드라이브에 복사해 놓는다. 다행히 항상 OS와 Data 파티션을 분리해 놓고 있어서 OS 재설치시 Data Backup이 따로 필요하지 않은 게 다행이다.

Windows 7 설치 USB로 부팅해서 Recovery Partition의 이미지 복원

혹시나 Windows 8 파일과 뒤섞이지 않도록 USB로 부팅한 뒤 C: 드라이브를 포맷해 버렸다. <Shift>+<F10>키를 눌러 명령창(Command Prompt)을 연다. USB로 부팅하면 명령창에서는 드라이브 문자가 뒤죽박죽이다. 명령창을 열었을 때 기본 드라이브가 X:, Dell Recovery Partition은 C:, Windows 8이 설치됐던 파티션은 E:, Data 파티션은 D:로 할당되어 있었다.

Dell Recovery Partiton은 파일들이 숨겨져 있어서 "dir /a" 명령으로 폴더를 볼 수 있다. 아래와 같이 한 후 재부팅하면 복구된 Windows 7으로 부팅할 수 있다.
C:\> dir /a 
C:\> cd dell\image
C:\> d:imagex.exe /apply FACTORY.WIM 1 E: /ref FACTORY1.WIM /ref FACTORY2.WIM
위에서 Dell의 복구 이미지 파일이 3개이고, E: 드라이브로 Windows 7을 복구한다는 의미이다.

처음에는 구글링 결과 아래와 같이 해도 되는 줄 알았는데 100%까지 복원이 끝난 후 오류가 발생하였기 때문에 위와 같이 했더니 잘 되더라.
C:\> d:imagex.exe /apply FACTORY.WIM 1 E:
참고로, 이미지 파일의 내용을 보고 싶다면 아래와 같이 하면 된다. imagex 명령의 옵션에 숫자 1이 항상 따라 붙는데 이미지 파일 번호이다.
C:\> d:imagex.exe /dir FACTORY.WIM 1

기타 참고 사항

Windows 7에서는 부팅 후 <F8>키로 부팅 옵션을 선택할 수 있는데 Windows 8+에서는 <F8>키가 작동하지 않는다. Windows 8에서 복구 모드로 진입하려면 <Shift> 키를 누른 상태에서 전원 재시동 버튼을 클릭하면 된다.


참고 사이트

http://bolsiroo.tistory.com/253
http://technet.microsoft.com/en-us/library/cc748966(v=ws.10).aspx

2014/08/31

Ubuntu BIOS 및 UEFI Grub 복구


(2015/11/21 최종 수정)

최근에 OS X El Capitan이나 Windows 10 (Build 10586.11)으로 Upgrade를 해 보니 OS 별로 Upgrade 할 때마다 자체 복구 파티션을 OS 파티션 끝에 추가하면서 파티션 수가 자동으로 늘어나는 일이 자주 생긴다. 이러면 우분투 파티션 번호가 밀려 버려서 Grub으로 부팅이 안되고 grub rescue> 모드로 진입해 버린다. 물론, 복구 파티션이 추가되는 경우는 OS 파티션을 매우 넉넉하게 잡았을 경우에만 발생하므로 모든 사용자가 경험하게 되는 일은 아니다.

아무튼 grub rescue> 모드로 진입시에 Grub을 복구하는 방법을 추가한다. 우분투 설치 USB를 사용할 필요가 없으니 아래의 방법들을 사용하기 전에 먼저 사용해 볼만한 방법이다.

Grub rescue> 모드를 이용한 Grub 복구 방법

아래와 같이 grub rescue 모드에서 우분투의 boot 파티션을 알아 낼 수 있다.

grub rescue> ls
(hd0) (hd1) (hd1,gpt1) (hd1,gpt2) ......

grub rescue> ls (hd1,gpt10)/
/boot ......

위와 같이 /boot 폴더가 보이는 파티션이 리눅스 boot 파티션이다. 이제 아래와 같이 하면 Grub으로 부팅할 수 있다.

grub rescue> set prefix=(hd1,gpt10)/boot/grub
grub rescue> insmod normal
grub rescue> normal

이제 우분투 Grub으로 정상 부팅하게 된다. 우분투로 부팅 후, 첫번째 하드디스크에 우분투가 설치되어 있다는 가정하에 아래 두개의 명령으로 Grub이 복구된다.

$ sudo grub-install /dev/sda
$ sudo update-grub

위의 첫번째 명령은 UEFI 방식이든 BIOS 방식이든 Grub이 사용자들에게 일관된 명령을 사용하도록 유도하려는 목적인 듯하다. 실제로는 UEFI와 BIOS 모드의 grub은 서로 다른 패키지이고, 세부 명령 파라메터도 아래의 UEFI 모드에서의 grub-install 명령이 매우 복잡한 것에서 알 수 있듯이 명령 자체가 다르게 수행된다.

grub rescue> 모드로 진입하든 못하든, 일반적으로 우분투 Grub을 복구하는 방법은 여전히 아래의 글을 참고하면 된다.


(2015/8/1 수정)

우분투에서 Grub2 복구 방법에 대한 글들은 많지만 최근의 UEFI 환경을 반영하지 못해 사용자 들이 혼란을 겪는 경우가 많다. 우분투에서는 booting 문제에 대한 모든 것을 boot-repair로 해결하도록 유도하는 듯 하나 이것이 만병통치약은 아니다. boot-repair의 작업 내용은 다소 불투명하고 사용자가 옵션을 어떻게 주느냐에 따라서도 결과가 달라지기 때문이다.

이 글에서는 BIOS 모드와 UEFI 모드로 우분투가 설치된 경우에 대해 OS가 어떤 방식으로 설치됐는지 확인하고 각각의 경우 Grub을 어떻게 복구하는지 알아 본다. 기본적으로, 우분투로 부팅할 수 있어야 하므로 Ubuntu UEFI 모드 설치 USB 만들기 방법으로 만든 USB를 사용한다. 이 USB는 UEFI와 BIOS 방식으로 부팅해서 우분투 live 기능을 사용할 수 있기 때문이다.

참고로, 최근의 Windows 8+이 설치된 PC 들은 UEFI 모드로 OS가 설치됐을 가능성이 높고, 그 전의 PC들은 BIOS 모드로 OS가 설치됐을 가능성이 높다. Multi-OS 환경에서는 두 가지 방식을 혼용해서 사용하기가 어렵다. 즉, Windows가 UEFI 모드로 설치됐으면 우분투도 UEFI 모드로 설치된 것이라고 봐도 좋다. 하지만, 사용자 PC 설정에 따라서 Windows 8+도 BIOS 모드로 설치될 수 있다는 점을 간과해선 안된다.

Ubuntu에서 UEFI vs. BIOS 모드 확인 방법

사용자가 확실히 우분투를 어떤 방식으로 설치했는지 알고 있다면 이 과정은 건너 뛰어도 된다.

우분투 설치 USB로 부팅해서 우분투가 설치된 /boot 파티션을 아래와 같이 마운트 한다. 우분투 설치시 /boot 파티션을 따로 지정하지 않으면 우분투가 설치된 파티션(= root partition)에 /boot 폴더가 있다. 우분투가 설치된 파티션을 잘 모르면 아래의 명령으로 확인할 수 있다.

$ sudo parted /dev/sda print

여기서는 3번 파티션, 즉, /dev/sda3에 우분투가 설치됐다고 가정한다.

$ sudo mkdir /mnt
$ sudo mount /dev/sda3 /mnt

이제 우분투에 설치된 Grub이 BIOS Grub(grub-pc 패키지)인지 EFI Grub(grub-efi 패키지)인지 확인한다.

$ ls -CF /mnt/boot/grub

만약, 실행 결과 i386-pc/ 폴더가 보이면 BIOS 모드로 우분투가 설치된 것이고, x86_64-efi/ 폴더가 보이면 UEFI 모드로 설치된 것이다. 두 가지가 모두 있다면 문제가 있는 것인데 그럴 가능성은 거의 없다. 단, 위의 USB에는 두 폴더가 다 있다.

그런데, 여기서 현재 USB로 부팅한 방식이 UEFI인지 BIOS 방식인지도 점검해볼 필요가 있다. 즉, Double Check 하자는 것이다.

$ ls -CF /sys/firmware

만약, 위의 실행 결과 efi/ 폴더가 없으면 USB는 BIOS 모드로 부팅한 것이고 efi/ 폴더가 보이면 UEFI 모드로 부팅한 것이다.

UEFI PC인 경우 두 가지 점검 결과가 동일해야 한다. Apple Mac PC의 경우에는 반드시 일치하지 않을 수도 있으나 부팅을 어떤 방식으로 했는지 부팅 시에 알 수 있어서 큰 문제가 없다.

아무튼, 현재 점검하고자 하는 것은 디스크에 설치된 우분투가 어떤 방식으로 설치됐는가 하는 것이므로 이를 바탕으로 Grub 복구 방식이 달라짐에 유의해야 한다.

BIOS 모드로 설치된 Ubuntu Grub 복구 방법

USB가 BIOS 모드로 부팅됐음을 확인하고, /dev/sda3에 우분투가 설치됐다고 가정하여,

$ sudo umount /mnt
$ sudo mount /dev/sda3 /mnt

$ for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
$ sudo chroot /mnt
$ sudo grub-install /dev/sda
$ sudo update-grub

UEFI 모드로 설치된 Ubuntu Grub 복구 방법

아래 두가지 방법 중 하나를 선택하면 된다.

1. Windows로 부팅 후 복구 방법

Windows 설치 후 Grub 메뉴로 진입할 수 없다면 Windows로 재부팅한 후, 관리자 권한으로 아래의 명령을 실행해야 한다.

bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi

재부팅 후 Grub에서 우분투로 부팅하여 아래의 명령만으로 EFI Grub이 복구될 수 있다.

$ sudo update-grub

2. Ubuntu 설치 USB로 복구 방법

우분투 설치 iso 이미지로 USB를 만들어 UEFI 모드로 부팅하면 최근의 15.04 버전까지도 grub-efi 패키지가 메모리의 우분투(USB로 부팅하면 RAM에 설치된 우분투가 기동됨)에 설치되지 않는다. grub-pc 패키지만 설치된다. 다만, grub-efi 패키지는 탑재되어 있어서 하드디스크에 우분투를 설치하면 grub-efi 패키지도 설치된다.

따라서, UEFI 모드로 USB로 부팅하고 나서 grub-efi 패키지를 메모리에 설치해야 한다. 아래와 같이하면 혹시 grub-efi 패키지가 설치되어 있더라도 패키지를 재설치해 주니까 안전하게 설치할 수 있다. 또한, 메모리에만 설치하는 것이므로 USB로 새로 부팅후 grub을 복구할 때마다 매번 설치해야 한다. 네트워크이 연결되어 있다고 가정하여,

$ sudo apt-get install --reinstall grub-efi

UEFI 모드 USB로 부팅됐음을 확인하고, UEFI 모드에서는 /dev/sda1이 ESP 파티션이며, /dev/sda3에 우분투가 설치됐다고 가정하여,

$ sudo umount /mnt
$ sudo mount /dev/sda3 /mnt
$ sudo mount -t vfat /dev/sda1 /mnt/boot/efi

$ sudo modprobe dm-mod
$ sudo grub-install --target=x86_64-efi --efi-directory=/mnt/boot/efi --bootloader-id=ubuntu --boot-directory=/mnt/boot --recheck --debug

재부팅 후 Grub 메뉴에 Windows가 보이지 않는다면 우분투로 재 부팅후,

$ sudo update-grub

참고 사항

현재 기동된 우분투에 grub-efi 패키지가 설치되어 있는지는 아래와 같이 확인할 수 있다.

$ ls -CF /usr/lib/grub

실행 결과 x86_64-efi/ 폴더가 보이면 grub-efi 패키지가 설치되어 있는 것이다. 이는 우분투 설치 iso이미지로 만든 USB로 UEFI 모드로 부팅 후 메모리의 우분투에 grub-efi 패키지가 설치되어 있는지 확인하기 위해서 필요하다. 또한, grub-install 명령이 제대로 동작하기 위해서 반드시 필요하다.

Ubuntu efibootmgr 활용


UEFI 모드로 설치된 Multi-OS 환경에서는 UEFI Booting을 지원하는 boot loader 들을 적절히 관리할 필요가 있다. 새로운 boot loader를 등록하거나 불필요한 boot loader를 삭제할 필요도 있고, boot loader 파일이 변경될 경우 NVRAM에 등록된 boot loader 정보를 갱신해 주어야 한다. 또, boot loader 간의 부팅 순서를 변경할 필요도 있다.

우분투를 포함한 Linux 환경에서 UEFI boot loader 정보를 관리하기 위한 도구가 efibootmgr이다. Windows에서는 bcdedit, Mac OS X에서는 bless를 사용할 수 있다. 여기서는 efibootmgr의 활용 방법에 대해 알아 본다. efibootmgr은 UEFI를 지원하는 PC 뿐만 아니라, EFI 환경의 Apple Mac PC에서도 사용할 수 있다.

부팅 정보를 직접 건드리기 때문에 부팅이 안되는 경우가 발생할 수 있으니 주의해서 사용해야 한다.

NVRAM에 등록된 boot loader 정보 확인

$ sudo efibootmgr -v
BootCurrent: 0001
Timeout: 5 seconds
BootOrder: 0080
Boot0000* Windows Boot Manager    ......
Boot0001* Ubuntu    ......
Boot0080* Mac OS X    ......
BootFFFF*     ACPI...... 

Grub2 boot loader 제거

위의 Ubuntu entry를 제거하려면 아래와 같이 하면 된다.

$ sudo efibootmgr -b 0001 -B

제거 됐는지 확인해 보면 아래와 같이 Boot0001* Ubuntu entry가 제거됐음을 알 수 있다.

$ sudo efibootmgr -v
BootCurrent: 0001
Timeout: 5 seconds
BootOrder: 0080
Boot0000* Windows Boot Manager    ......
Boot0080* Mac OS X    ......
BootFFFF*     ACPI......
제거 후에는 Ubuntu로 부팅할 수 없다.

Grub2 boot loader 신규 등록

다시 Ubuntu entry를 아래와 같이 추가하면 된다.

$ sudo efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\ubuntu\\shimx64.efi -L "Ubuntu"

여기서 /dev/sda1이 ESP 파티션이다. 참고로, BIOS 메뉴에서 Secure Boot를 사용하지 않는 경우에는 shimx64.efi 대신 grubx64.efi를 사용해도 된다.

부팅 순서 변경

위에서 BootOrder: 0080으로 되어 있는데 Boot0080은 Mac OS X임을 알 수 있다. 즉, 기본적으로 Mac OS X로 부팅한다는 뜻이다. 앞서 Apple Mac에서 EFI Multi-OS Booting 방법을 따른다면 Mac 부팅시 Option 키를 누르지 않으면 Mac OS X로 부팅한다는 의미이다.

이제 아래와 같이 함으로써 부팅 순서를 Ubutu, Mac OS X, Windows 순으로 바꿀 수 있다. 부팅 순서를 바꾼다는 의미는 Ubuntu로 부팅할 수 없으면 Mac OS X, 그 마저 실패하면 Windows로 부팅한다는 뜻이다.

$ sudo efibootmgr -o 0001,0080,0000

아래와 같이 BootOrder가 변경됐음을 확인할 수 있다.

$ sudo efibootmgr -v
BootCurrent: 0001
Timeout: 5 seconds
BootOrder: 0001,0080,0000
Boot0000* Windows Boot Manager    ......
Boot0001* Ubuntu    ......
Boot0080* Mac OS X    ......
BootFFFF*     ACPI......

Grub에 Mac OS X Boot Entry 추가

위에서 Ubuntu로 부팅하도록 순서를 바꿨으면 Grub에 Mac OS X 부트 메뉴를 추가해 주어야 한다. 기존의 Grub 메뉴에 OS X boot entry가 있으나 이는 Hackintosh 용인 듯 하다. 아래와 같이 /etc/grub.d/40_custom 파일에 아래 내용을 추가해서 저장한다.

$ sudo nano /etc/grub.d/40_custom
 menuentry "Apple Intel-Mac OSX" {
    # Search the root device for Mac OS X's loader.
    search --file --no-floppy --set=root /usr/standalone/i386/boot.efi
    # chainload the loader, pass parameters like -v directly
    chainloader (${root})/usr/standalone/i386/boot.efi #-v
}
$ sudo update-grub

update-grub 만으로도 Windows 메뉴 엔트리는 Grub에 자동으로 포함된다.

이제 Mac에서 부팅시에 Option 키를 누르지 않으면 Ubuntu Grub으로 부팅한다. Grub에서 부팅하려는 OS를 선택할 수 있다. 물론 Option 키를 눌러서도 부팅하려는 OS를 선택할 수 있다.

Apple Mac에서 EFI Multi-OS Booting



Apple Mac에서 EFI Multi-OS 설치 방법에서는 rEFInd를 사용해서 Triple-OS Booting하는 방법을 다루었는데 여기서는 rEFInd를 사용하지 않고 Mac 자체의 boot manager를 이용해서 Triple-OS booting 하는 방법에 대해 설명한다. 최종 목표는 Mac booting시 Option Key를 눌렀을 때 위의 사진과 같이 EFI 모드로 설치된 Triple-OS 부팅 선택 화면이 나오도록 하자는 것이다.

기본적인 개념은 UEFI Booting에서 다루었던 ESP 파티션의 fallback boot loader를 Windows boot loader로 대체함으로써 Windows 부트 메뉴가 보이도록 하고, Ubuntu 부트 메뉴 설정은 Mac에서 부트 메뉴가 보이도록 하는 방법을 따르는 것이다. 물론, Windows를 설치하지 않는 경우에는 fallback boot loader를 Grub boot loader로 대체하기만 하면 된다.

1. Mac OS X Boot Options

Mac OS X와 Recovery Mode 부트 메뉴는 별다른 설정이 필요하지는 않다. 다만, 나중에 모든 OS 별 Icon 이미지를 설정하는 방법에 대해서만 별도로 참고하면 된다.

2. Windows Boot Option

Mac OS X로 부팅한 후 터미널을 실행하여 다음과 같이 ESP 파티션을 마운트 한다.

$ sudo mkdir /mnt
$ sudo mount -t msdos /dev/disk0s1 /mnt

마운트 후 fallback boot loader를 Windows boot manager로 대체한다.

$ sudo cp /mnt/EFI/Microsoft/Boot/bootmgfw.efi /mnt/EFI/Boot/bootx64.efi

3. Ubuntu Boot Option

우분투의 경우에는 다소 복잡하다. 기본적으로 최소 10MB 크기의 추가적인 Apple hfs+ 파티션이 필요하다. 다행히 Apple Mac에서 EFI Multi-OS 설치 방법에서와 같이 추가적인 MacData 파티션을 만들어 두었다면 그것을 사용하는 것도 방법이다. Mac OS X의 터미널에서 아래의 과정을 따르면 된다. 여기서는 MacData 파티션의 Volume 명을 MDATA로 가정한다.

기본적으로 새로운 Mac 파티션에 커널 파일이 있어야 하고,

$ sudo touch /Volumes/MDATA/mach_kernel

우분투 boot loader를 지정해 주어야 한다. 아래에서 ESP 파티션의 hard link를 사용할 수 없는 이유는 파티션 간의 hard link가 불가능하기 때문이다.

$ sudo mkdir /mnt
$ sudo mount -t msdos /dev/disk0s1 /mnt

$ cd /Volumes/MDATA
$ sudo mkdir ./EFI
$ sudo cp -R /mnt/EFI/ubuntu ./EFI/
$ sudo mkdir -p ./System/Library/CoreServices
$ sudo ln /Volumes/MDATA/EFI/ubuntu/grubx64.efi /Volumes/MDATA/System/Library/CoreServices/boot.efi

마지막으로, /Volumes/MDATA/System/Library/CoreServices/SystemVersion.plist 파일을 생성하여 아래의 내용을 추가해야 한다.
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
        <key>ProductBuildVersion</key>
        <string></string>
        <key>ProductName</key>
        <string>Linux</string>
        <key>ProductVersion</key>
        <string>Ubuntu</string>
</dict>
</plist>

4. Boot Options 메뉴에 OS 별 Icon 이미지 보이기

이제 Icon 이미지를 바꿔 주는 것이 좋다. 부트 메뉴의 Icon 이미지를 바꾸려면 ESP 파티션을 포함한 각 boot loader 가 탑재된 파티션에 해당 OS의 Icon 이미지를 /.VolumeIcon.icns 파일로 복사해 주면 된다. rEFInd 패키지에는 OS 별 아이콘 이미지 파일 들이 들어 있으므로 그것들을 활용하면 된다.

5. Mac Booting 후 Option Key Test

최종적으로, 기존에 설치된 rEFInd 패키지를 제거한다.

$ sudo rm -rf /EFI/refind

제거한 후, Mac을 재부팅하여 Option 키를 눌렀을 때 위의 사진과 같은 OS 선택 메뉴가 나오는지, 또 해당 OS로 제대로 부팅하는 지 확인해 본다.

기타 참고 사항

Mac에서 bless를 이용하여 Grub boot loader로 부팅하도록 할 수 있는데 아래와 같이 하면 된다.

$ sudo bless --folder=/Volumes/MDATA --file=/Volumes/MDATA/EFI/ubuntu/grubx64.efi --setBoot


참고 사이트

http://glandium.org/blog/?p=2830
https://help.ubuntu.com/community/UEFIBooting

Apple Mac에서 EFI Multi-OS 설치


최근의 Apple Intel-Mac PC 들은 UEFI 표준을 따르지는 않더라도 UEFI를 지원하는 OS 들을 EFI 모드로 쉽게 설치해서 사용할 수 있다. 예전부터 Mac에서는 Windows 설치를 지원하기 위해 Boot Camp를 지원해 왔으나 이것은 EFI 방식이 아니고 CSM BIOS emulation 방식을 이용한 것이었다. 이러다 보니 Ubuntu 조차도 Mac(AMD 64) iso 설치 이미지를 따로 제공하고 있는데 BIOS 모드로 설치할 수 있도록 하기 위한 것이다.

여기서는 Mac OS X가 설치된 Mac PC에서 EFI 모드로 Windows와 Ubuntu를 설치하여 Triple-OS 환경을 구성하는 방법에 대해 알아 본다. Mac은 모델이나 출시 연도에 따라서 H/W가 달라질 수 있지만 적어도 최근 2~3년 내의 기종들은 모델에 상관없이 이 글에서 언급하는 내용이 적용될 것이다. 물론, 개별 드라이버들을 별개로 설치해야 할 수도 있으나 대부분은 기본 OS 설치 만으로도 사용할 수 있는 수준이다. 즉, iMac, Macbook Pro (retina), Macbook Air, Mac Mini 등에 모두 적용할 수 있다.

OS를 EFI 모드로 설치하려면 H/W에서 당연히 UEFI/EFI를 지원해야 하고 OS도 UEFI를 지원하는 것들이어야 한다. Mac OS X는 기본으로 EFI 모드로 설치 되어 있고, Ubuntu는 12.04.2 이후, Windows는 Vista 이후 64-bit 버전들에 대해서만 UEFI를 지원한다. 세부 사항은 UEFI Booting을 참고하는 것이 좋다.

1. Disk Partition

Mac OS X에서 Disk Utility를 이용해서 Windows와 Ubuntu 설치를 위한 파티션 공간을 미리 확보한다. OS가 모두 설치된 후에 특정 OS의 파티션 Tool을 이용하여 파티션 변경을 할 경우, 변경하지 않은 다른 OS의 파티션 정보가 변경될 수 있다. OS간 파티션을 다루는 방식이 다룰 수 있기 때문이다. 파티션 정보가 변경되면 뜻하지 않게 Mac OS X를 포함한 특정 OS로는 부팅할 수 없는 상황이 생길 수 있다. gdisk 등을 이용하여 파티션 테이블을 백업해 두면 쉽게 극복할 수 있는 문제이기는 하다.

가장 좋은 방법은 사전에 파티션 계획을 잘 세워서 파티션을 변경하지 않도록 하는 것이다. 경험상, OS 별로 최소한 OS 파티션과 Data 파티션은 구분해 두는 것이 좋다. 나중에 OS 버전 업 등 OS 재설치시에 Clean Install을 쉽게 할 수 있기 때문이다. 그리고, OS가 지속적으로 Upgrade 됨을 감안하여 OS 파티션을 넉넉히 잡아 주는 것이 좋다. SSD만을 사용하는 경우에는 용량 부족으로 다소 제약이 생길 수는 있다. 참고로, Mac OS X는 50GB, Windows 7+은 60GB, Ubuntu는 20GB 정도는 최소 OS 파티션으로 잡아 주는 것이 좋다. 디스크 용량 제한이 없으면 OS 파티션은 모두 100GB 정도면 된다.

이제 UEFI 환경에서 OS 별로 필요한 파티션 들에 대해 대해서도 미리 생각해 둘 필요가 있다. (U)EFI 방식에서는 GPT 파티션 방식을 따른다. Mac OS X에서는 기본적으로 ESP(EFI System Partition)을 확보해 두고 있다. 아래에, Triple-OS에 대한 기본 파티션들을 열거 하였다. 즉, Triple OS를 위한 기본 파티션 갯수만 8개이다.
  • 공유: ESP 파티션 (OS 별 boot loader 탑재)
  • Mac OS X: OS 파티션, MacData 파티션
  • Windows: OS 파티션, WinData 파티션
  • Ubuntu: OS 파티션, UbuntuData 파티션, swap 파티션
ESP 파티션과 Mac OS X 파티션을 제외한 나머지 파티션들을 Disk Utiltity를 이용하여 파티션닝한다. Mac Data 파티션과 swap 파티션을 제외한 나머지 파티션 들은 모두 MS-DOS 파일시스템으로 해 두는게 편리하다.

아래에 iMac 1TB 디스크에 Triple-OS 설치 후 파티션 정보를 예로 들었다. 12개의 파티션이 있는데 3번과 4번의 Recovery HD는 Mac OS X Upgrade 시 Mac OS X 파티션을 쪼개서 자동으로 Recovery 파티션을 만든 것이고, 5번 파티션도 Windows 설치시 자동으로 생성한 파티션이다. 위에서 8개 + 3개 하면 11개여야 하는데 12개인 이유는 디스크 공간이 넉넉하기 때문에 리눅스 Data 파티션을 1개 더 만든 것이다.

$ sudo parted /dev/sda print
Model: ATA APPLE HDD ST1000 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system     Name                          Flags
 1      20.5kB  210MB   210MB   fat32           EFI system partition          boot
 2      210MB   99.6GB  99.3GB  hfsx            Apple_HFSX_Untitled_2
 3      99.6GB  100GB   650MB   hfs+            Recovery HD
 4      100GB   101GB   650MB   hfs+            Recovery HD
 5      101GB   101GB   134MB                   Microsoft reserved partition  msftres
 6      101GB   311GB   210GB   ntfs            Basic data partition          msftdata
 7      311GB   520GB   210GB   ntfs            Basic data partition          msftdata
 8      520GB   620GB   100GB   ext4
 9      620GB   720GB   100GB   ext4
10      720GB   736GB   16.0GB  linux-swap(v1)
11      736GB   894GB   157GB   ext4
12      894GB   1000GB  107GB   hfs+            Apple HFS/HFS+

2. EFI 모드로 Windows 설치

Mac에서 EFI 모드로 Windows를 설치하려면 Mac OS X의 Boot Camp를 사용해선 안된다. Boot Camp는 BIOS 모드로 부팅한다는 점 외에도 디스크 파티션 테이블을 Hybrid-MBR 방식으로 구성하므로 GPT 파티션 방식의 장점을 훼손하게 되고 파티션 변경에 매우 민감한 구조가 되어 Windows로 부팅하지 못하는 사태가 발생될 수 있다.

Windows 설치 iso를 USB로 굽되 Windows 8+인 경우 Rufus를 사용하여 uefi & gpt 방식으로 구워야 한다. 또한, Apple 홈페이지에서 Boot Camp 드라이버를 검색해서 미리 내려 받아서 USB에 복사해 둘 필요가 있다. 이 때, Boot Camp 드라이버가 자신의 Mac 모델과 반드시 일치해야 함에 유의한다.

Mac을 부팅하여 Option 키를 눌렀을 때 USB의 Windows EFI를 선택하여 부팅하면 되고, 설치시에 Windows OS 파티션과 Data 파티션을 모두 ntfs로 다시 포맷하는 것이 좋다. 설치 과정은 Windows 일반 설치 과정과 동일하다. Windows 설치가 완전히 끝난 후 Boot Camp 드라이버를 설치하면 Boot Camp 제어판을 이용해 Mac OS X로도 부팅할 수 있다.

3. EFI 모드로 Ubuntu 설치

우분투 사이트에서 Mac AMD가 아닌 일반 AMD 64-bit iso 이미지를 내려 받아서 Rufus를 이용해서 uefi & gpt 방식으로 굽는다(uefi & mbr 방식으로 구워도 된다). 또는, 앞서 작성한 게시물인 Ubuntu UEFI 모드 설치 USB 만들기를 따라해도 된다.

Mac을 부팅하여 Option 키를 눌렀을 때 USB의 EFI를 선택하여 부팅하면 되고, 설치 후 개별 드라이버들이 정상 동작하지 않을 경우가 있으므로 Ubuntu live 상태에서 기능들을 점검해 보는 것이 좋다. 적어도 live 상태에서 개별 드라이버에 문제가 없다면 설치 후 해당 드라이버 들의 문제는 쉽게 해결할 수 있다.

설치 시에 Linux 파티션을 OS와 Data 파티션을 ext4 파일시스템으로 포맷하면 된다. 앞서 생성한 우분투의 Data 파티션은 /home에 마운트 하도록 하고, 앞서 생성한 swap 파티션도 swap 파티션으로 지정한다. 나머지 설치 과정은 일반 우분투 설치 과정과 동일하다.

설치까지는 문제 없는데 설치 후 재 부팅해서 우분투로 부팅할 수 있는 방법이 아직 없다.

4. Triple-OS booting

Mac에서 Multi-OS booting이 가능하도록 하기 위한 가장 간단한 방법은 Mac OS X로 부팅하여 rEFIndrEFIt를 설치하는 것이다. rEFIt는 개발이 중단되었으므로 rEFInd를 사용하는 것이 좋다. 설치 후 Mac을 재부팅하면 rEFInd boot manager가 OS별 boot loader를 선택할 수 있도록 해준다.

rEFInd를 사용하지 않고 Mac 자체의 boot manager를 이용해서 Triple-OS booting 하는 방법에 대해서는 별도의 게시물인 Apple Mac에서 Multi-OS Booting을 참조하면 된다.

5. Ubuntu 개별 드라이버 설치

Mac에서 우분투 개별 드라이버 이슈를 알기 위해서는 다음 명령으로 Mac Model을 알 필요가 있다.

$ sudo dmidecode -s system-product-name

iMac13,2에서는 일단, WIFI가 문제였다. 다음 명령으로 WIFI 모델을 알 수 있다.

$ lspci -nn -d 14e4:

Broadcom BCM4331 모델인데 live USB에서 Broadcom proprietary driver가 정상 동작하는 것을 확인하였으므로, 우분투 live USB의 deb 패키지 파일을 복사해서 설치했다. 그리고, 설치하는 김에 kernel 업그레이드시 자동으로 모듈을 재설치할 수 있도록 dkms도 같이 설치했다.

$ sudo dpkg -i dkms_2.2.0.3-1.1ubuntu5_all.deb
$ sudo dpkg -i bcmwl-kernel-source_6.30.223.141+bdcom-0ubuntu2_amd64.deb

$ sudo depmod -a
$ sudo update-initramfs -c -k `uname -r`
$ sudo reboot

NVIDIA 드라이버의 경우 기본 설치된 nouveau도 화면 보호기가 제때 동작하지 않는 것을 제외하면 큰 문제는 없었으나 3D 가속기능을 사용하기 위해 proprietary driver를 사용하기로 했다. 문제는 우분투의 기본 드라이버는 정상 동작하지 않았다. NVIDIA 모델을 알기 위해서는 다음 명령을 사용하면 된다.

$ lspci | grep -i nvidia

NVIDIA에서 노트북용 GTX 675MX 최신 드라이버를 내려 받아서 설치했더니 그럭저럭 돌아간다. 사실, 약간의 문제가 있는데 일부 application에서 화면 떨림 현상이 잠깐씩 발생한다. 그리고, <Alt>+<Ctrl>+<F1> ~ <F5>를 눌러 Console 모드로 진입하면 black screen이 뜬다. 다행히, <Alt>+<F7> 키로 GUI로 되돌아 올 수는 있다. NVIDIA 드라이버 설치 방법은 Ubuntu 복구 모드(recovery mode) 활용을 참조하면 된다.

2014/08/25

UEFI Booting


최근 수년 내의 PC 들은 하드웨어적으로 UEFI를 기본적으로 지원하고 있었지만 UEFI 모드로 OS를 설치하는 사용자는 그리 많지 않았다. 물론, Mac OS X에서는 인텔 맥에 EFI를 채택한지 오래고, Windows는 Vista 이후 64-bit에서 UEFI를 지원하기 시작했으며, 우분투의 경우엔 12.04.2 버전 이후 64-bit에 대해 UEFI를 지원하기 시작했다. 2012년 10월 말 Windows 8 출시 이후, 이를 탑재한 PC 들이 보급되면서 UEFI로 부팅하는 PC가 본격적으로 늘어나고 있다. 그 전의 PC들은 Windows가 BIOS 모드로 탑재됐던데 반해 최신 Windows PC들은 UEFI가 기본이 됐기 때문이다.

여기서는 UEFI 환경에서 Multi-OS를 설치하기 위해 알아 두어야 할 몇가지 기본 사항에 대해 다룬다. 물론, 단일 OS 사용자라 해도 UEFI는 BIOS 방식을 대체할 수 밖에 없기 때문에 UEFI booting 방식에 대해 알 필요가 있다.

UEFI 방식의 장점

BIOS 방식과 비교해서 UEFI 방식을 사용함으로써 사용자가 실제로 느낄 수 있는 장점은 별로 많지 않을 수 있다.

부팅 속도가 빠르긴 하지만 대단한 차이는 아니고,  2TB 이상의 대용량 디스크를 사용할 수 있지만 일반 PC 사용자들에게 보편화 된 것은 아니다. 물론 추세적으로 몇 년 내에는 분명히 장점이 될 전망이다. 현 시점에서 가장 내세울 수 있는 장점은 주 파티션(Primary Partition) 수이다. BIOS 방식에서 사용하는 MBR 파티션은 최대 4개의 주 파티션 만을 허용하므로 OS를 여러 개 설치하려면 1개의 주 파티션을 이용한 확장 파티션을 사용해야 한다. 확장 파티션은 데이터의 안전성에 취약하다. 이에 반해 UEFI 방식에서는 GPT 파티션을 사용하는데 기본적으로 128개의 주 파티션을 만들 수 있다. 즉, Multi-OS 환경에서는 UEFI 방식이 장점이 될 수 있다.

UEFI 환경의 Boot Process

UEFI Firmware가 하드웨어를 초기화하고 나서 NVRAM에 등록된 boot manager 정보를 읽어 boot entry에 정의된 UEFI application을 실행한다. 이 application은 UEFI shell이 될 수도 있고 OS 별 boot manager/loader도 될 수 있다. boot manager는 또 다른 boot loader를 호출 할 수도 있고 최종 boot loader가 OS의 kernel을 호출함으로써 OS가 기동된다. 이 boot manager/loader 들은 OS 설치시 EFI System Partition에 설치된다.

EFI System Partiton(ESP)

UEFI firmware가 UEFI boot loader를 실행하기 위한 파티션을 EFI System Partition(ESP)이라고 한다. 즉, OS와는 독립적인 부트 파티션이라고 이해하면 된다. OS를 최초로 설치하면 여기에 UEFI shell이나 boot manager 또는 boot loader를 탑재한다. Multi-OS 환경에서는 OS 설치시 각각의 OS들이 자신들이 제공하는 boot loader를 ESP에 설치한다. ESP 파티션은 FAT 12/16/32 파일시스템을 사용해야 하고, Linux 환경에서는 gparted에서 boot flag를 설정해 주어야 한다. Microsoft에서는 파티션 최소 Size로 260MB를 권장하고 있다. 필수 사항은 아니지만, GPT 파티션을 최초 구성할 때 첫번째 파티션을 ESP로 잡아주는 것이 좋다. GPT 파티션들은 동등하지만 ESP 파티션은 PC가 부팅하기 위해서 반드시 필요한 파티션이다.

그런데, NVRAM의 boot entry의 정보가 깨졌거나 정보가 없을 때 UEFI 모드로 부팅을 할 수 있도록 하기 위해 기본 부트로더(Fallback boot loader)를 사용한다. 기본 부트로더는 ESP 파티션의 /EFI/Boot/bootx64.efi 파일이다.  ESP 파티션은 FAT 파일시스템을 사용하므로 대소문자 구분이 없고, 경로 명도 Windows 경로 방식을 사용하기도 한다. 즉, 기본 부트로더를 \efi\boot\BootX64.efi 라고 해도 이상할 것이 없다.

EFI System Partition 폴더 구조

아래에 Triple-OS 환경의 ESP 파티션 폴더 구조를 참고할 필요가 있다. 기본 부트로더인 /EFI/Boot/bootx64.efi 파일을 제외하면 OS 벤더별로 자신 만의 폴더 구조를 유지하고 있음을 알 수 있다. 기본 부트로더는 대체로 OS 설치 시 자신의 boot loader를 복사하는데 Mac의 경우엔 기본 부트로더가 없다. 이 경우엔 사용자가 grub2나 rEFInd와 같은 boot loader 파일을 복사해 주는 것이 좋다.

/-- EFI/
    |-- APPLE/
    |   `-- EXTENSIONS/
    |       `-- Firmware.scap
    |-- Boot/
    |   `-- bootx64.efi       : Fallback boot loader
    |-- Microsoft
    |   `-- Boot
    |       |-- BCD
    |       |-- BCD.LOG
    |       |-- BOOTSTAT.DAT
    |       |-- Fonts/
    |       |-- Resources/
    |       |-- boot.stl
    |       |-- bootmgfw.efi  : Windows boot manager
    |       |-- bootmgr.efi
    |       `-- memtest.efi
    `-- ubuntu/
        |-- MokManager.efi    : Machine owner's key manager
        |-- grub.cfg          : redirect to grub-efi installed partition/folder
        |-- grubx64.efi       : Grub2 boot loader with secure boot disabled
        `-- shimx64.efi       : Grub2 boot loader with secure boot enabled

참고 사항

최근의 PC 들은 UEFI Firmware를 대체로 내장하고 있으나 제조사 별로 UEFI 표준을 정확히 따르지는 않고 있음에 유의할 필요가 있다. Apple Mac의 경우에도 자체 EFI 방식을 사용하고 있다.

또한, UEFI 규격에는 CSM(Compatibilty Support Module)이 있어서 Legacy BIOS emulation을 지원하므로 사용자들은 자신의 PC가 UEFI 모드로 부팅되고 있는지 BIOS 모드로 부팅되고 있는지 모를 수도 있다. Firmware에 설정된 방식으로 부팅하므로 OS 설치시에는 반드시 현재 설정된 모드로만 설치가 가능하다는 점에 유의해야 한다.

부팅시에 BIOS Setup UI를 사용한다는 것은 더이상 정확한 표현은 아니지만 의사 소통을 위해 관행에 따라야 할 것이다. Apple Mac의 경우에는 BIOS Setup UI가 없이 파티션 정보를 가지고 EFI 모드로 부팅하거나 CSM(BIOS) 모드로 부팅할 수 있다.


참고 사이트

https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface
http://www.rodsbooks.com

2014/08/21

Ubuntu XKB를 이용한 keyboard map 확장


우분투에서 한영키를 설정하는 방법에 대해서 정리했지만 좀더 나은 방법을 찾아 보았다. 결론적으로는 나은 방법을 찾은 것은 아니다. 다만, XKB를 사용함으로써 이런 문제 들을 해결할 수 있는 가능성이 있다는 점에 만족해야 한다.

예전에는 X-Window 환경에서 키보드 맵핑에 Xmodmap을 사용했는데 언제부터인가 XKB를 사용하는 것 같다. XKB 사용법을 local 사용자 환경에 적용하는 방법과 전체 시스템 환경에 적용하는 방법에 대해 정리한다. 한영키를 입력소스 toggling에 사용할 수 있도록 지정하는 것과 오른쪽 Alt 키를 한영키에 맵핑하는 예를 들었다.

참고로, 이렇게 해서 ibus에서 한영키가 동작하지는 않는다. ibus 소프트웨어 자체의 키보드 맵핑 로직이 있기 때문이다.

Local 사용자 환경에 XKB 적용하기

사용자 폴더에 XKB가 사용할 폴더 구조를 만든다.

$ mkdir -p ~/.xkb/{keymap,symbols}

키보드 맵핑을 바꾸려는 내용을 파일로 만들어 저장한다.

$ gedit ~/.xkb/symbols/hangul_kbd
// /usr/share/X11/xkb/symbols/group
// Hangul key toggle
partial modifier_keys
xkb_symbols "hangul_toggle" {
    key <HNGL> {        [  ISO_Next_Group,      Hangul  ]       };
};

// /usr/share/X11/xkb/symbols/altwin
// Alt_R key is mapped to Hangul key
partial modifier_keys
xkb_symbols "hangul_ralt" {
    key <LALT> { [ Alt_L, Meta_L ] };
    key <RALT> { type[Group1] = "TWO_LEVEL",
                 symbols[Group1] = [ Hangul ] };
    modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R };
//  modifier_map Mod4 {};
};
$ setxkbmap -print > ~/.xkb/keymap/hangul.xkb

위의 명령으로 생성된 파일에서 xkb_symbols 라인에 위의 hangul_kbd를 아래와 같이 추가한다. 아래의 내용에서 위의 hangul_kbd 파일 내용 중 hangul_toggle 부분만 적용하고자 할 때는 hangul_kbd 대신 hangul_kbd(hangul_toggle)을 사용하면 된다.

$ gedit ~/.xkb/keymap/hangul.xkb
// Generated from "setxkbmap -print" and added xkb_symbols part.
xkb_keymap {
    xkb_keycodes { include "evdev+aliases(qwerty)" };
    xkb_types    { include "complete" };
    xkb_compat   { include "complete" };
    xkb_symbols  { include "pc+kr+us:2+inet(evdev)+hangul_kbd" };
    xkb_geometry { include "pc(pc105)" };
};
이제, 현재 사용자 환경에 바로 적용할 수 있는데 아래의 명령으로 가능하다.

$ xkbcomp -I$HOME/.xkb ~/.xkb/keymap/hangul.xkb $DISPLAY

매번 로그인 할 때마다 적용하기 위해서는 ~/.xinitrc 파일에 위의 명령을 추가해 주면 된다.

시스템 전체 환경에 XKB 적용하기

nano 등 편집기를 이용해 /usr/share/X11/xkb/symbols/group 파일 맨 위에 아래 내용을 추가한다.
$ sudo nano /usr/share/X11/xkb/symbols/group
// /usr/share/X11/xkb/symbols/group
// Hangul key toggle
partial modifier_keys
xkb_symbols "hangul_toggle" {
    key <HNGL> {        [  ISO_Next_Group,      Hangul  ]       };
};
nano 등 편집기를 이용해 /usr/share/X11/xkb/symbols/altwin 파일 맨 위에 아래 내용을 추가한다.
$ sudo nano /usr/share/X11/xkb/symbols/altwin
// /usr/share/X11/xkb/symbols/altwin
// Alt_R key is mapped to Hangul key
partial modifier_keys
xkb_symbols "hangul_ralt" {
    key <LART> { [ Alt_L, Meta_L ] };
    key <RALT> { type[Group1] = "TWO_LEVEL",
                 symbols[Group1] = [ Hangul ] };
    modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R };
//  modifier_map Mod4 {};
};
수정한 내용이 시스템에 반영되기 위해서는 컴파일된 xkb 캐시 파일들을 삭제 후 재로그인 해야 한다.

$ sudo rm -rf /var/lib/xkb/*.xkm

로그아웃 했다가 다시 로그인 하면 grp(hangul_toggle)과 altwin(hangul_alt)를 사용할 수 있게 된다.

ibus에서 XKB 사용하기

ibus에서는 위의 시스템 전체 환경에 XKB 적용하기를 활용하면 한영키를 사용하도록 할 수 있다. 그러나 이 방법은 좋은 방법이 아니므로 권하고 싶지는 않다.

위에서는 grp(hangul_toggle)과 altwin(hangul_alt)를 새로 추가한 것이지만 기존의 키보드 맵을 수정하면 ibus가 그것을 사용하도록 할 수 있다. 예를 들면, 다음 명령으로 ibus가  grp(menu_toggle)을 사용하도록 한다.

$ gsettings set org.gnome.desktop.input-sources xkb-options "['grp:menu_toggle']"

그리고 나서 /usr/share/X11/xkb/symbols/group 파일의 "menu_toggle" 부분을 아래의 내용으로 대체해 버리면 된다.
// /usr/share/X11/xkb/symbols/group
// Hangul key toggle
partial modifier_keys
xkb_symbols "menu_toggle" {
    key <HNGL> {        [  ISO_Next_Group,      Hangul  ]       };
};
변경 사항을 적용하려면 xkm 파일 들을 지우고 다시 로그인 해야 한다.


별로 도움이 되는 내용은 아니지만 나중에 참고하기 위해 정리해 둔다.

참고 사이트

http://madduck.net/docs/extending-xkb
https://wiki.archlinux.org/index.php/X_KeyBoard_extension