2015/10/28

Ubuntu 15.10 Upgrade


지난 주에 우분투 15.10이 나왔는데 주말에 15.04였던 놈을 Software Updater를 사용해서 15.10으로 Upgrade했다. 대개는 Clean Install을 했었는데 우분투 홈페이지에서 15.10의 새로워진 점을 보았더니 크게 사용자가 느낄 정도로 달라진 점은 없어 보였기 때문이다. 대략 1시간 반 정도 걸렸다. 우분투 15.10에 대한 새로운 기능들은 여기를 참고하면 더 도움이 된다.

대체로 이번 Upgrade는 15.04의 버그 Fix 및 gcc를 비롯한 주요 패키지들이 버전 업 됐다는 것에 만족해야 할 듯 하다. 15.10이라는 버전에 걸맞지 않는다는 의견들도 상당히 있더라. 몇일 써본 봐로도 겉보기에 15.04와 크게 달라진 점은 별로 없어 보인다.

하지만, 우분투를 새로 설치하려는 이들에게는 굳이 우분투 14.04.3 LTS 버전을 설치하기 보다는 많이 안정화됐고 systemd와 같은 새로운 환경에 빨리 적응할 수 있도록 우분투 15.10을 적극 추천하는 바이다.

우분투 15.10 Desktop에서 새로워진 점

Linux kernel 4.2가 탑재되었다. 최신 AMD Radeon GPU 사용자들에겐 희소식일 수 있다. kernel 4.0 이후에 도입된 kernel live patching 기능은 배포판 사용자 들에겐 그리 큰 의미가 있는 것은 아니었다. 어차피 커널 보안 패치는 배포판 서버에서 제공하는 것을 받아야 하니까. 서버 사용자이면서 중요한 커널패치를 실시간으로 적용하고자 할 때는 도움이 된다. 이외에도 Intel Broxton 등 새로운 드라이버들이 새 커널에 많이 포함되었단다.

Unity 7.3.2 데스크탑에서는 주로 Dash쪽 기능들이 개선됐는데 눈에 띄는 부분은 Dash에서 검색한 App을 바탕화면이나 Unity Launcher에 Drag & Drop으로 끌어다 놓을 수 있는 점이다. 그리고, Gnome 3.16에 기반하여 Unity가 동작하는데 대표적으로 Scrollbar가 Gnome Overlay Scrollbar로 바뀌었다. 사실 Unity Scrollbar는 별로 편하다고 생각되진 않았고 굳이 그런데 공들일 필요가 있나 싶겠다는 생각도 있었는데, Canonical이 Upstart를 버린 것처럼 포기할 건 과감히 포기하는 모습은 좋아 보인다. 좀 아쉬운 점은 Gnome 3.16의 패키지들이 모두 Ubuntu 15.10에 Update되진 않았다. 대표적으로 gedit나, Nautilus 파일 관리자가  그것들이다.

이외에도, 개발자들을 위한 Ubuntu Make(umake)가 Android 개발 환경을 비롯해서 다양한 platform과 framework 들을 통합 지원한단다. 우분투에서 Game을 즐기는 이들에게는 Steam Controller가 제공된다는 점도 희소식이 될 것이다. 또한, Persistent Network Interface Name이 도입되어서 eth0 같은 네트워크 인터페이스명 대신 다소 복잡하면서도 영구적인 명칭을 갖게 되었다. 다만, 나처럼 Upgrade한 경우에는 eth0를 그대로 사용하는 듯 하다. VirtualBox에 설치해 보았더니 enp0s3라는 인터페이스가 생겼다. 아래 명령으로 확인할 수 있다.

$ ifconfig

이 밖에, 배경화면을 포함해서, gcc 5.2.1, Firefox 41.0.2, Libre Office 5.0.2.2 등등 수 많은 패키지가 Update 되었다.

한글 패키지와 다솜(dasom) 입력기에 대한 바램

한글 관련 패키지는 언제나처럼 [System Settings] > [Language Support]를 선택하면 설치되는데 fcitx가 기본 패키지로 포함되어 있어서 ibus 대신 쉽게 바꿔 사용할 수 있다. 최근에 우분투 한국 커뮤니티에 다솜 입력기를 정식 출시했던데, 다음 우분투 버전에는 다솜 입력기도 한글 패키지에 포함됐으면 하는 바램이다. ibusfcitx 한글 관련 설정은 우분투 14.10 이후의 방법들을 사용하면 되므로 다시 언급하지는 않겠다.

참고로, 다솜 입력기에서는 한글 마지막 입력 후 마우스 이동시 한글이 따라 다니는 끝 글자 버그를 해결했단다. 고생하신 개발자 분께 감사드린다. 한편으로는, 다른 한글 입력기들의 고질적인 유지보수 문제를 해결하기 위해서 더 많은 사람들이 관심과 참여를 가질 수 있기를 바라고, 혼자서 프로젝트를 끌고 가려고 하지말고 나같은 노친네들보다는 후배들이 많이 참여할 수 있도록 해 주시길 바란다. Mir나 Wayland로 X-Window 환경이 바뀌게 되면 또 다른 노력이 필요할 것이고 미래에도 새로운 기술 환경에 적응해서 살아 남아야 하기 때문이다.

우분투 15.10 Upgrade 후 생긴 자잘한 문제들

우분투 15.10으로 Upgrade하고 나서 우분투로 부팅하면 Unity 로그인 화면이 나타나야 하는데 공포의 black screen이 나타났다. 다시 전원을 끄고 부팅했더니 제대로 나타났다가 또 부팅하면 다시 black screen이다. 그런데, Volume을 좀 키웠더니 다행히 black screen 문제는 공포의 black screen 증상은 아니었다. 우분투 부팅시 북 두드리는 소리가 들렸기 때문이다. <Ctrl><Alt><F2> 눌렀다가 <Alt><F7>을 눌렀더니 로그인 화면이 나타났다. 혹시나 해서 ~/.cache 폴더를 지우고 lightdm을 다시 설치했더니 이 문제가 해결된 듯 했는데 재발하더라. [System Settings] > [Software & Updates] > [Additional Drivers] Tab에서 Nouveau 드라이버를 선택했다가 재부팅 후 다시 Nvidia 드라이버를 선택하고 재부팅했더니 더이상 재발하지 않는다.

이 외에 VirtualBox 5.0.8이 죽는 문제가 있었는데 한번만 생기고 더이상 발생하지는 않고 있다. 그리고 chrome이나 chromium 기동시 기본 브라우저로 설정할지를 계속 물어 보는데 더 이상 묻지 않기를 click하면 된다.

기타 참고 사항

우분투 15.10부터 바뀐 것인지 아니면 chrome/chromium에서 제공하는 기능인지 모르겠는데 다운로드시 다운로드 진행상태가 Unity Launcher의 아이콘에 표시된다. firefox는 안된다.

VirtualBox UEFI 모드 Guest 부팅 문제 해결

이전 게시물에서 해결하지 못했던 문제를 해결했는데, 우분투 14.10 이후 버전부터 VirtualBox에서 UEFI 모드로 Guest를 설치하면 가상머신으로 부팅할 수 없었던 문제가 있었다. 15.10에서도 역시 같은 증상이었는데 구글링해 보니 해결 방법이 있었다. UEFI Shell에서 startup.nsh 스크립트 파일이 있으면 이놈을 먼저 실행하는데 여기에 grubx64.efi path를 넣어 주면 UEFI 모드로도 부팅할 수 있다. VirtualBox나 btrfs 파일시스템의 문제는 아니었다. 다만, 우분투 14.04에서는 별다른 설정 없이도 가능했는데 왜 그런지는 모른다. VirtualBox에서 우분투 설치 iso로 부팅한 후 아래와 같이 startup.nsh를 새로운 가상 머신의 EFI System Partition(ESP)의 / 폴더에 생성해 주고 가상머신을 재부팅하면 된다.

$ sudo mount /dev/sda1 /mnt
$ cd /mnt
$ sudo echo '\EFI\ubuntu\grubx64.efi' > startup.nsh

2015/10/07

Grub과 gdisk를 이용한 Windows UEFI/BIOS 설치 USB 만들기


OS X El Capitan으로 Upgrade하면서 우분투 설치 USB가 잘 동작이 안됐던 문제 때문에 USB를 갖고 놀다가 실수로 USB를 지워 버렸다. 우분투 설치 USB를 다시 만드는 김에 Windows 설치 겸용으로도 사용할 수 있도록 Grub과 gdisk를 이용해서 다시 만들었다.

USB 굽기 Tool을 사용하지 않는 방식의 장점은 USB 용량이 커지고 있기 때문에 저장공간을 최대한 활용할 수 있다는 것이다. All-in-one multi-OS 설치 USB 까지는 아니더라도 USB 1개로 BIOS 방식이든 UEFI 방식이든 가리지 않고 우분투와 Windows 설치가 가능하도록 하려는 것이다. 우분투나 OS X에서는 GPT 파티션이든 Hybrid MBR 파티션이든 어떻게 만들어도 상관없는데 이전 글에서 다룬 바와 같이 Windows는 GPT 파티션에 대한 제약 사항이 많다. 이 때문에 우분투를 비롯한 리눅스는 여러개 배포판 또는 버전을 1개의 USB에 iso 파일로 담으면 되지만, Windows는 1개의 버전만 가능하다. 엄밀히 말하면, 아래의 Windows USB 제약사항 들 때문에 Grub2를 사용할 경우  Windows 1개 버전에 대해서는 UEFI/BIOS 설치가 가능하고 2개의 BIOS용 Windows 버전을 추가할 수는 있다.

Grub2를 이용한 Windows 설치 USB 만들 때의 제약사항
  • 우분투처럼 Windows 설치 iso 파일을 이용하여 직접 부팅할 수는 없다. Windows 설치 파티션에 Windows 설치 iso의 내용물을 모두 복사해야 한다. 뭐 syslinux/isolinux로 가능할 수도 있단다. 다만, 이 경우 3~4GB의 Windows 설치 파일을 모두 메모리에 로딩하기 때문에 메모리 제약사항이 생긴단다.
  • Windows 설치 파일들은 USB 상에서는 반드시 첫번째 파티션에 있어야 하고 FAT 파일시스템을 사용해야 한다. 하드디스크는 상관없는데 USB는 Windows에서 저장장치로 쳐주지 않는다. 단, BIOS 모드로 Windows 설치시에는 Grub2의 drivemap 기능을 사용할 수 있으므로 다른 파티션에 있어도 된다. Grub2의 drivemap은 UEFI 모드에서는 사용할 수 없더라.
  • BIOS 모드로 Windows 설치시에는 GPT 파티션을 인식하지 못한다. 이 때문에 Hybrid MBR 파티션을 사용해야하고 EFI Protetive 파티션을 제외한 나머지 3개의 MBR 파티션을 사용할 수는 있다.
  • Hybrid MBR 파티션을 사용하는 USB는 Windows 설치시에는 문제가 없지만, Windows에서 사용하고자 할 때에는 제약사항이 생긴다. EFI 모드의 Windows는 그나마 GPT 파티션들을 인식할 수 있지만 BIOS 모드의 Windows는 USB 파티션들을 아예 인식하지 못할 수 있다.

gdisk를 이용한 USB 파티션 만들기

위의 Windows USB 제약 사항을 고려하여 아래와 같이 gdisk로 파티션을 나누었다. 당연히, 빈 USB에서 작업해야 하고, GPT 파티션 Table을 먼저 만들어야 한다.

$ sudo gdisk /dev/sdb
[sudo] password for aaa:
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: hybrid
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with hybrid MBR; using GPT.

Command (? for help): p
Disk /dev/sdb: 31703040 sectors, 15.1 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 9D794CCE-5719-43A0-A5A7-D8DFBE8488D3
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 31703006
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         8390655   4.0 GiB     0700  UWRoot
   2         8390656         8800255   200.0 MiB   EF00  UESP
   3         8800256         8802303   1024.0 KiB  EF02  BIOS boot partition
   4         8802304        17190911   4.0 GiB     0700  UWData
   5        17190912        31703006   6.9 GiB     8300  ULData

Command (? for help): x

Expert command (? for help): o

Disk size is 31703040 sectors (15.1 GiB)
MBR disk identifier: 0x01AEFD5F
MBR partitions:

Number  Boot  Start Sector   End Sector   Status      Code
   1      *           2048      8390655   primary     0x07
   2               8390656      8800255   primary     0xEF
   3               8802304     17190911   primary     0x07
   4                     1         2047   primary     0xEE

Expert command (? for help):
위의 내용은 이미 만들어진 USB 파티션을 보여 준 것인데 이것을 참고하여 파티션을 만들면 된다. 먼저 gpt 파티션들을 만들고 파티션 Tpye code를 위와 같이 지정해 준다. 5개의 gpt 파티션을 만들었는데 필수 파티션은 앞의 1~3의 3개 파티션이다. 1번 파티션이 Windows 설치 파티션(4GB)이고, 2번은 ESP(EFI System Partiton; 200MB), 3번은 Grub BIOS Boot Partition(1MB)이다. 1번이 반드시 Windows 설치 파티션이어야 하기 때문에, ESP로 2번 파티션을 사용하고 있다. 참고로 4번은 Windows Data용 파티션이고 5번은 리눅스 설치 iso들을 집어 넣기 위한 파티션이다.

파티션을 나누고 나서 gparted를 이용하여 파일시스템을 만들어 준다. 1과 2번은 fat32로 format 해야 하고, 3번은 포맷할 필요 없다. 4번은 fat32, 5번은 ext4로 포맷하였다. 

gparted로 포맷하고 나서, 다시 gdisk로 Hybrid MBR 파티션을 만들어 주어야 한다. 참고로, gparted로 포맷한 후 gdisk에서 확인해 보니 Hybrid MBR 파티션이 만들어져 있었다. 하지만, 이것을 사용하면 안되고, 위의 마지막 4개의 파티션과 같이 gdisk에서 gpt 1, 2, 4번 파티션을 Hybrid MBR 파티션으로 새로 만든다. 위에 만들어진 Hybrid 파티션을 보면 4번이 EFI Protective 파티션이 되었음에 주의할 필요가 있다.

결과적으로, 아래와 같이 파일시스템이 만들어졌다. parted/gparted에서는 Hybrid MBR 파티션 정보를 볼 수 없다.

$ sudo parted /dev/sdb print
Model: USB Flash Disk (scsi)
Disk /dev/sdb: 16.2GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: pmbr_boot

Number  Start   End     Size    File system  Name                 Flags
 1      1049kB  4296MB  4295MB  fat32        UWRoot               msftdata
 2      4296MB  4506MB  210MB   fat32        UESP                 boot, esp
 3      4506MB  4507MB  1049kB               BIOS boot partition  bios_grub
 4      4507MB  8802MB  4295MB  fat32        UWData               msftdata
 5      8802MB  16.2GB  7430MB  ext4         ULData
USB에 UEFI 및 BIOS Grub 설치

UEFI Grub은 파일만 복사하면 되므로 아무 리눅스에서나 작업이 가능하지만, BIOS Grub을 설치하려면 BIOS 모드로 부팅한 리눅스에서 작업해야 한다. BIOS 모드로 설치된 리눅스가 없다면 Virtual Box로 하나 만들어 두는게 좋다.

UEFI Grub 파일들을 우분투 12.04.2 이후의 64bit 우분투 설치 iso에서 USB ESP 파티션(2번)에 아래와 같이 복사한다.

$ sudo mkdir /tmp/mnt
$ sudo mount ~/Downloads/ubuntu-15.04-desktop-amd64.iso /tmp/mnt

$ sudo mount /dev/sdb2 /mnt
$ sudo cp -R /tmp/mnt/EFI /mnt
$ sudo cp -R /tmp/mnt/boot /mnt

BIOS Grub은 아래와 같이하면, 2번 파티션 외에 USB의 MBR Boot Sector와 3번 Grub BIOS Boot Partition에 설치 된다.

$ sudo grub-install --recheck --boot-directory=/mnt/boot /dev/sdb

우분투 설치 iso 파일들을 USB에 복사

우분투 설치용으로도 USB를 사용할 것이기 때문에 우분투 설치 iso들을 아래와 같이 5번 ext4 파티션에 복사하였다.

$ sudo umount /mnt
$ sudo mount /dev/sdb5 /mnt
$ sudo mkdir /mnt/boot-isos

$ sudo cp ~/Downloads/ubuntu-15.04-desktop-amd64.iso /mnt/boot-isos
$ sudo cp ~/Downloads/ubuntu-15.04-desktop-i386.iso /mnt/boot-isos
$ sudo sync

Windows 설치 파일 복사

USB 1번 파티션에 Windows 설치 iso 이미지 파일 내의 모든 폴더/파일 들을 복사한다.

$ sudo umount /mnt
$ sudo mount /dev/sdb1 /mnt

$ sudo umount /tmp/mnt
$ sudo mount ~/Downloads/windows.iso /tmp/mnt
$ sudo cp -R /tmp/mnt/* /mnt
$ sudo sync

Grub Boot Menuentry 설정

아래의 Grub 부트 엔트리를 USB 2번 ESP 파티션의 /boot/grub/grub.cfg에 추가한다. 원래의 grub.cfg 파일을 지우고 새로 만드는 편이 좋다.

$ sudo umount /mnt
$ sudo mount /dev/sdb2 /mnt
$ sudo rm -f /mnt/boot/grub/grub.cfg
$ sudo nano /mnt/boot/grub/grub.cfg

$ cat /mnt/boot/grub/grub.cfg
menuentry "[USB] Ubuntu 64-bit Install" {
   set isofile="/boot-isos/ubuntu-15.04-desktop-amd64.iso"
   loopback loop (hd0,5)/$isofile
   linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject
   initrd (loop)/casper/initrd.lz
}

menuentry "[USB] Ubuntu 32-bit Install" {
   set isofile="/boot-isos/ubuntu-15.04-desktop-i386.iso"
   loopback loop (hd0,5)/$isofile
   linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
   initrd (loop)/casper/initrd.lz
}

menuentry "[USB] UEFI Mode Windows 8+ Install" {
   insmod part_gpt
   insmod fat
   set root='(hd0,gpt1)'
   chainloader (${root})/efi/boot/bootx64.efi
}

menuentry "[USB] BIOS Mode Windows Install" {
   insmod part_gpt
   insmod fat
   set root='(hd0,gpt1)'
   drivemap -s (hd0) ${root}
   ntldr (${root})/bootmgr
}
참고로 마지막 "[USB] BIOS Mode Windows Install" 메뉴에서 drivemap은 불필요 하지만, BIOS 모드의 Windows 설치 파티션이 USB의 첫번째 파티션이 아닐때 사용할 수 있다.

Windows 버전에 대한 고려 사항

위의 Grub 부트 엔트리 들 중 "[USB] UEFI Mode Windows 8+ Install" 메뉴엔트리는  Windows 8 이후 버전 들에만 적용된다. Windows 설치 iso 파일에 /efi/boot/bootx64.efi 파일이 추가됐기 때문이다.

Windows에서 UEFI를 지원하기 시작한 것은 Windows Vista 이후이고 64bit 버전에만 적용된다. Windows Vista에서 현재의 Windows 10까지 모든 Windows 버전에서 UEFI Windows Boot Manager로 사용될 수 있는 파일이 있는데 bootmgfw.efi라는 파일이다. 이 파일은 Windows 설치 iso 이미지 안에 포함된 /sources 폴더에 install.wim 파일 안에 포함되어 있다. 이미 다른 PC에 설치된 Windows가 있다면, C:\Windows\Boot\EFI\bootmgfw.efi 파일을 사용해도 된다.

가령, UEFI 모드로 Windows 7을 설치하고자 할 때에는, bootmgfw.efi 파일을 현재 폴더에 복사해 놓았다면 아래와 같이 USB의 Windows 설치 파티션에 /efi/boot/bootx64.efi 파일로 복사해 주면 된다.

$ sudo umount /mnt
$ sudo mount /dev/sdb1 /mnt

$ sudo mkdir /mnt/efi/boot
$ sudo cp ./bootmgfw.efi /mnt/efi/boot/bootx64.efi

설치 USB Test

PC BIOS/Firmware 설정이 UEFI냐 BIOS/CSM 모드냐에 따라 Grub 메뉴에서 UEFI Mode인지 BIOS Mode인지를 확인해서 맞는 놈을 선택해서 부팅해야 한다. 우분투 메뉴는 UEFI/BIOS를 따로 구분하지 않는다. 해당 모드의 Grub이 자동으로 부팅시에 결정되기 때문이다.

Mac PC에서 USB 부팅시 참고사항

Mac에서는 USB를 꽂고 부팅시 <Option> Key를 누르고 있으면 USB Icon으로 부팅 가능한 옵션이 추가되어 표시되는데, 아이콘 밑에 Windows로 표시된 놈은 Windows 부팅 옵션이 아니고, BIOS 모드로 부팅하기 위한 옵션이다. 이 글대로 설치 USB를 만들면 Windows로 표시된 아이콘 외에 EFI Boot로 표시된 아이콘이 두 개가 보인다. 하나는 EFI 모드의 Windows 설치 파티션으로 부팅하고, 하나는 EFI 모드의 Grub으로 부팅되는데 어느 놈이 어느 놈인지 구분할 수 없다. rEFInd에서는 구분이 가능하다. 또한, Windows로 표시된 아이콘을 선택하면 BIOS 모드의 Grub으로 부팅된다.

즉, Mac은 BIOS/Firmware 설정이 따로 없는 대신에 UEFI와 BIOS/CSM 부팅을 동시에 지원한다. Boot Camp가 이 BIOS/CSM 모드를 이용하는 것이고 BIOS/CSM 모드에서는 Hybrid MBR 파티션을 사용한다.

2015/10/04

OS X El Capitan의 Rootless 정책과 Disk Utility에 대하여


이전 글에서 OS X El Capitan Upgrade 후 발생한 문제들에 대해 얘기했는데, 이전 OS X 버전의 Recovery 파티션 두 개를 지워 보려고 하다가 생긴 문제들에 대해서 주로 Disk Utility 사용자 관점에서 정리해 본다. 기본적으로 Disk Utility를 가지고 Recovery 파티션을 지울 수 없었기 때문이다. 이전 글에서도 잠깐 언급했듯이 OS X El Capitan의 새로운 보안 정책인 Rootless(또는 SIP; System Integrity Protection) 때문에 Disk Utility에도 제약이 가해질 수 밖에 없으리란 것은 어느 정도 이해할 수 있지만 본연의 디스크 관리 기능을 제대로 할 수 없다는 것에 대해 왕짜증난다.

Rootless 보안 정책은, 간단히는 root 권한으로도 System의 중요한 설정이나 폴더/파일 들을 건드리지 못한다고 이해하면 되지만, 세부적으로는 매우 복잡한 것 같다. 3rd Party 시스템 관련 앱 개발 회사나 개발자들, 그리고 OS X 서버 사용자들에게는 꽤 부담을 줄 듯하다. 일단, 구글링을 통해 알게된 몇 가지만 정리한다.

Rootless 또는 SIP에 대하여...

Rootless는 com.apple.rootless라는 확장 파일 속성으로 관리하는 것 같고, NVRAM, 프로세스, 폴더, 파일 레벨에서도 통제할 수 있는 듯 하다. 일단, 파일시스템 Protection이 걸려 있는 폴더 들은 /System, /bin, /sbin, /usr(단, /usr/local은 제외) 등 이다. 이 폴더들은 root도 write 권한이 없다. SIP를 관리하는 새로운 Utility가 csrutil이라는 놈이다. OS X Recovery 파티션으로 부팅했을 때에만 SIP를 해제 또는 사용하도록 설정할 수 있다. 다만, 현재 SIP 설정 상태는 언제든지 아래와 같이 터미널에서 확인 할 수 있다.

$ csrutil status

Recovery 파티션으로 부팅해서 Rootless를 해제하고자 한다면 disable, 다시 설정하고자 한다면 enable, 초기 상태(enabled)로 reset하고자 할 때는 clean 옵션을 아래의 예와 같이 주면 된다.

$ csrutil disable

이렇게 Rootless 설정을 바꾸면 재부팅해야 효력이 발생한다고 경고 메시지가 뜬다.

위의 예와 같이 Rootless를 해제하고 OS X로 부팅해서 상태를 확인하면 아래와 같이 뜬다.

$ csrutil status

System Integrity Protection status: disabled.

Configuration:
  Apple Internal: disabled
  Kext Signing: disabled
  Filesystem Protections: disabled
  Debugging Restrictions: disabled
  DTrace Restrictions: disabled
  NVRAM Protections: disabled

위의 각 disabled 된 놈들을 개별적으로 활성화할 수도 있는데, 잘 모르고 사용하면 위험하니까 모르는게 낫겠다 싶다.

Disk Utility의 문제 들

우선, Disk Utility UI가 완전히 바뀌었는데 뭐 Apple 입장에서는 나름 사용자가 쉽게 사용할 수 있도록 바꾸었단다. 파티션을 Pie Chart 모양으로 보여 주는데 보기는 좋으나 마우스 클릭할 공간이 줄어 들었다. GPT 파티션이 기본적으로 128개까지 파티션을 사용할 수 있는데 파티션 수를 20개 이상 사용하는 사용자가 있다면 왕짜증 곱배기가 될 것이다.

기능적으로도 아예 삭제된 기능들이 있는데, Rootless를 도입하면서 삭제된 권한 복구(permissions repair) 기능 외에도, DVD나 RAID 지원 기능이 아예 사라졌다. 사라진 기능들로 인한 불만도 가득하더라.

내가 Disk Utility를 사용하면서 왕짜증나는 문제 들은 또 다른 것들이다. 그것은 본연의 디스크 관리를 할 수 있는 방법이 없다는 것이다.


기본적으로, 전체 파티션을 볼 수 있는 방법이 없다. 물론, 내가 El Capitan에 아직 적응이 안돼서 못찾은 것일 수도 있지만 기존의 방법들이 무용지물이다. 즉, 아래의 터미널 명령으로 Disk Utiltity에서 Debug 메뉴가 생겨서 Hidden Partition까지도 볼 수 있었는데 El Capitan에서는 UI가 바뀌면서 사라진 듯 하다. 기본적으로 보이지 않는 파티션은 ESP(EFI System Partition)와 OS X Recovery Partition이다.

$ defaults write com.apple.DiskUtility DUDebugMenuEnabled 1

위의 화면에서 오른 쪽 Bar Chart를 보면 다른 OS 파티션들이 같이 포함되어 있다. 얼핏 보면 모든 파티션이 다 보이는 듯 하지만 ESP나 Recovery Partition은 아예 없다. 위 쪽의 Partition 명령을 Click하면 Pie Chart가 나타나는데 여기서도 당연히 나타나지 않는다. 참고로, 두 번째와 세 번째 untitled로 표시된 650MB 파티션 두 개는 이전 버전의 OS X Recovery Partiton인데 Mac 부팅시에 안보이도록 gdisk로 파티션 type을 임의로 설정한 것이다. El Capitan의 Recovery Partition이 Mac OS X 파티션 다음에 보여야 하는데 안보이고 맨 첫번째의 ESP 파티션도 안보인다. gdisk에서 Mac OS X 파티션 type은 Apple HFS/HFS+(AF00)이고, OS X Recovery 파티션 type은 Apple boot(AB00)이다. 실제로 3개의 복구 파티션 tyoe code를 gdisk에서 AB00으로 바꾸면 새로운 Disk Utility에서는 3개 파티션이 모두 사라진다. 대신 3개 버전의 OS X Recovery 모드로 각각 부팅할 수는 있다.

그리고, 더 큰 문제는 파티션을 삭제하려면 왼쪽의 Tree 메뉴를 사용해야 하는데 여기에는 기본 OS X 파티션과 Windows 파티션 밖에 보이지 않는다. 리눅스 파티션을 Disk Utility로 지우지 못할 이유가 무엇일까? 이것도 강화된 보안 정책의 일환인가? Windows는 만만해서 파티션을 지울 수 있는 건가? 또한, ESP와 OS X Recovery Partition은 Disk Utility에서 아예 안보이니까 당연히 삭제는 물론이고 아무 것도 할 수 없다.

또 한 가지 문제는 불필요한 Recovery Partition을 삭제하면서 알게된 문제인데 위의 Hidden Partition이 보이지 않음으로 인해 파생되는 문제이다. OS X Upgrade시에 Mac OS X 파티션을 끝에서부터 650MB 정도를 잘라서  Recovery Partition을 새로 추가한다. 나처럼 Mac OS X 파티션이 넉넉하고 3번 Upgrade했다면 3개의 Recovery Partition이 추가된다. 가장 최근에 추가된 놈이 Mac OS X 파티션 바로 옆에 위치하게 된다. 나머지 두 개는 지워도 되는 놈인데 Mac OS X 파티션과 합칠 수는 없다. 중간에 최신 Recovery 파티션이 위치하고 있기 때문이다. 방법은 모든 Recovery 파티션을 삭제하고 새로 최신 Recovery 파티션을 생성해야 하는데 El Capitan에서 가능한지는 더 조사해 보아야 한다. 아무튼, 문제점을 설명하려고 좀 장황해 졌는데, 우분투에서 gdisk를 이용해서 두 개의 Recovery 파티션을 삭제하고 다시 OS X에서 Disk Utility의 Partition 메뉴에서 [-]로 두 개의 빈 파티션을 삭제해 보았다. 중간에 최신의 Recovery 파티션이 El Capitan의 Disk Utility에서 보이지 않음으로 인해 Mac OS X 파티션에 두 개의 파티션이 제대로 합쳐진 것(merge)처럼 보인다. 실제로는 두 개의 파티션이 최신 Recovery 파티션에 합쳐져 있었다.

이 밖에도, OS X Upgrade 시에 OS X 데이터 파티션의 파일 시스템 타입이 hfs인데도 인식하지 못하고 Microsoft Basic Partition으로 바꿔 버린 것과, Rootless를 한번 해제하기 전에는 Disk Utility에서 보여주는 전체 파티션이 Recovery Mode로 부팅했을 때와 OS X로 부팅했을 때 차이가 생겼던 문제도 있었다.

맺음말

OS X El Capitan의 Disk Utility는 여러가지 기능이 삭제되어 불편할 뿐만 아니라, 본연의 디스크 관리 기능을 모두 수행할 수도 없고, 사용자가 의도한 대로 동작하지 않을 수도 있다는 점을 알아 둘 필요가 있겠다.

El Capitan에서 강화된 보안 정책인 Rootless에 대해서도, OS X 고급 사용자나  관리자 입장에서는 어차피 Recovery Mode에서는 모든 root 권한을 여전히 사용할 수 있다는 점에서, 근본적으로 필요한 것이었는지 의구심이 든다. 보안 강화라는 명목으로 3rd Party들을 Apple이 통제하려는 의도일 수도 있다는 생각이 든다.

Apple이 System Integrity에는 그렇게 신경을 쓰면서 Application Integrity에는 소홀해진 느낌~!!!

2015/10/02

OS X El Capitan 설치 후 Ubuntu Grub 복구


새로운 OS가 나오면 무작정 설치하는 안좋은 습관이 있다. 이로 인해 발생하는 문제들도 참 다양하다. 남들보다 먼저 문제를 겪으면 구글링해도 답을 찾기 어려운 경우가 많다. 아무튼 Mac OS X El Capitan Upgrade가 떴길래 걍 설치했다. 우분투로 부팅이 안되는 경우는 이번이 처음은 아니다.

El Capitan Upgrade 후 발생한 문제들

<Option> Key를 눌렀을때 Grub으로 부팅할 수 있도록 해 놓은 것이 작동 안하는 것은 그러려니 한다. 그런데, 하드디스크의 Grub은 물론이고, 전에 만들어 놓은 우분투 설치 USB로도 부팅이 안된다. Windows 10과 새로운 OS X 10.11로만 부팅이 된다. 또, 한가지 문제가 더 생겼는데 OS X 데이터 파티션이 안잡힌다. OS X의 터미널에서 파티션을 확인해 보니 파티션들은 잘 있다.

$ diskutil list

그런데, 가만히 보니 OS X Recovery 파티션이 하나 더 생겼다. 이전 복구 파티션들을 안지웠더니 Recovery 파티션만 3개가 되었다. 문제는 리눅스 파티션이 뒤쪽에 있기 때문에 복구 파티션 하나가 새로 생김으로 인해 파티션 번호가 하나씩 밀려 버린다는 것이다. 당장 예상되는 문제가 Grub 메뉴엔트리의 파티션 번호가 달라지기 때문에 Grub이 당연히 동작하지 않으리란 것이다. 예전에는 리눅스의 /etc/fstab에서도 파티션 번호를 사용했었는데 요즘은 각 디바이스 파티션의 UUID를 사용하기 때문에 리눅스 파일시스템이 mount 되지 않는 문제는 없다.

구세주 rEFInd Boot Manager

아무튼 이 모든 문제를 해결하기 위해서는 어떻게든 우분투로 부팅할 수 있어야 한다. OS X를 새로 Upgrade하면 보통은 rEFInd를 새로 설치해 주면 우분투로 부팅할 수 있다. 그런데, El Capitan에서는 Rootless Mode 라는 새로운 보안 정책이 추가되면서 rEFInd를 설치해도 부트 엔트리에 rEFInd가 추가되지 않는 듯 하다. Rootless Mode라는 것이 얼핏 구글링 한 바로는 root 권한으로도 맘대로 시스템 파일들을 건드리지 못하도록 한단다. OS X Recovery 파티션으로 부팅해서 해제하면 된다는데 아직 모르는 게 많아서 꺼려진다. 쉬운 방법을 선택하기로 했다. rEFInd를 기본 boot loader로 만들어 버리는 것이다.

참고로, rEFInd는 OS가 부팅하기 이전에 부팅하므로 OS dependency가 없다. 어떤 OS 환경이든지 binary 파일들이 같다는 얘기다. 다만, rEFInd 0.8.4 미만 버전의 경우 OS X에서 설치하면 기본 설치 위치가 OS X 파티션이었는데 이후의 버전들은 OS에 상관없이 ESP(EFI System Partition) 파티션에 설치된다. OS X Yosemite 이후 OS X 파티션에서는 rEFInd로 부팅할 수 없단다. 또 한가지 참고할 사항은  rEFInd를 만든 이가 바로 gdisk의 저자라는 것이다.

아래와 같이 ESP를 마운트 한 후, 기본 boot loader인 bootx64.efi 파일을 refind_x64.efi로써 대체한다. 당연히 rEFInd가 설치되어 있어야 한다.

$ sudo mkdir /mnt
$ sudo mount -t msdos /dev/disk0s1 /mnt
$ cd /mnt/EFI/Boot
$ cp -f ../refind/refind_x64.efi ./bootx64.efi

이제 OS X를 재부팅 한 후 <Option> Key를 누르고 있으면 EFI 부트 엔트리가 보이는데 이 놈을 선택하면 rEFInd가 뜨고 다시 부트 엔트리들이 나타난다. 여기서 grubx64.efi를 선택해 봐야 파티션 넘버가 달라져서 우분투로 부팅할 수 없다. rEFInd는 계속 Upgrade되고 있는데 최신 버전에서는 리눅스 커널로 바로 부팅할 수가 있다. 커널로 부팅하려면 rEFInd 부트 엔트리 중에서 다시 rEFInd를 선택하면 된다. 이렇게 두 번 선택하는 이유는 처음에는 기본 부트로더가 된 rEFInd로 부팅한 것이지만 설정 파일(refind.conf)을 읽지 못하기 때문에 ESP 파티션의 boot loader들만 보여주기 때문이다.

최근에 사용했던 리눅스 커널을 선택하니 우분투로 깔끔하게 부팅이 된다.

Ubuntu에서 Grub 복구

우분투로 정상 부팅했으니 아래의 명령만으로도 Grub이 복구될 줄 알았다.

$ sudo update-grub
$ sudo reboot

위의 명령으로 최소한 /boot/grub/grub.cfg의 부트 엔트리들에 있는 파티션 넘버는 교정이 된다. 그런데, 우분투로 부팅이 안된다. 아래와 같이 오류 발생...

Error: unknown filesystem.
grub rescue>

----------------------------------------------------------------------------------------------------------------
참고: grub rescue> 모드에서 우분투로 부팅하기

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

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

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

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

grub rescue> set prefix='(hd1,gpt9)/boot/grub'
grub rescue> insmod normal
grub rescue> normal
----------------------------------------------------------------------------------------------------------------

이렇게 해서 Grub으로 부팅한 후,

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

다시 부팅했으나 역시 매한가지다. grub rescue>....

grub-efi 패키지를 재설치해도 해결이 안되는 걸 보니 혹시 무슨 cache 파일같은 찌꺼기 때문일지도 모른다는 생각이 들어서 우분투로 재부팅한 후,

$ sudo apt-get install grub

하니, grub-efi 패키지를 지우고 db를 갱신하겠냐고 물어본다. 패키지만 설치된 상태에서 Ctrl-c로 빠져 나왔다. 그리고 다시 grub-efi 패키지 설치...

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

이렇게 하니까 예전의 우분투 Grub으로 완전히 복구되었다.

그런데, 돌이켜 보면 이전에 정리했던 UEFI Grub 복구 절차만 충실히 따라 했어도 복구되었을지 모른다는 생각이 든다. 위의 내용과 비교해서 빠진 부분이 grub-install 명령 실행 부분인데 이 명령을 사용하지 않았던 이유는 "efibootmgr -v" 명령으로 확인시 우분투 boot entry가 멀쩡히 살아 있었기 때문이다. grub-efi 패키지를 새로 설치하면 grub-install 명령이 자동으로 수행된다. grub-install 명령이 NVRAM에 우분투 boot entry를 등록해 주는 일 외에 파티션 변경에 따른 설정을 추가로 해줄 수도 있기 때문이다.

OS X 데이터 파티션 복구

이제 우분투가 정상이 되었으니 나머지 문제들은 쉽게 처리할 수 있다. OS X 데이터 파티션은 gdisk에서 확인해 보니 Microsoft Basic Data(0700) 파티션으로 파티션 코드가 설정되어 있었다. 이 놈은 Apple HFS/HFS+(AF00) 이었던 놈이다. 코드를 바꿔주고 OS X로 재부팅했더니 데이터 파티션이 제대로 복구되었다.

gdisk에 대한 다른 글 들에서 언급한 바 있지만 서로 다른 OS의 파티션 Tool들을 혼용해서 사용할 경우에는 반드시 gdisk로 파티션 테이블에 변화가 생겼는지 확인해 볼 필요가 있다. Recovery 파티션을 OS X Upgrade시 추가하면서 파티션에 변화가 생긴 것인데 OS X 파티션 조차 몰라 보다니... :-(

각종 부팅 설정 원상 복구

일단 rEFInd도 최신 버전으로 재설치했고, Mac 부팅시 <Option> Key를 눌렀을 때 Grub이 뜨도록 다시 설정하였다. 그리고 부팅 순서도 우분투 Grub으로 먼저 부팅하도록 efibootmgr로 재설정 하였다.

남은 일

우분투 설치 USB로 왜 부팅이 안되는지 알아 볼 필요가 있고, 불필요한 OS X Recovery 파티션도 제거해야 겠다.

(2015/10/06 Update)

우분투 설치 USB로 부팅이 안됐던 이유는 USB에서 gdisk로 Hybrid MBR 파티션을 만들면서 EFI Protective Partition(0xEE)의 위치를 맨 앞이 아니라, 맨 뒤로 바꿨기 때문이었다. 이 상태에서는 Hybrid MBR 파티션 들 중 첫번째 FAT 파일시스템을 ESP로 인식해 버리더라. 이전 우분투 설치 USB 만들기 방법에 문제가 있었던 것은 아니었다.

Grub이 이상해졌네...

그런데, 우분투 15.04 설치 후 Grub이 몇번 update 됐는데 그 때문인지 아니면 El Capitan Upgrade 후에 뭔가 바뀐 것인지 잘 모르겠는데, /dev/sda인 하드디스크를 Grub에서 hd0가 아니라 hd1으로 인식하고 있더라... USB를 꽂은 채로 Grub 부팅시 다시 확인해 보면 USB는 hd0로 인식하고, 하드디스크는 hd2로 인식한다. 그런데, /boot/grub/grub.cfg 파일의 부트 메뉴엔트리에는 하드디스크 hint가 hd0로 되어 있어도 UUID를 먼저 참고하기 때문에 하드디스크로 부팅하는데 문제가 생기지는 않는다. 다만, 하드디스크의 우분투 설치 iso파일로 부팅할 때는 grub.cfg에서 hd0가 hd1으로 바뀌어야만 부팅이 된다. 이 때는 hint가 아니고 정확한 위치를 지정하고 있기 때문이다.

아무튼, Grub이 update 되면서 벌레가 생긴 것인지, 아니면 첫번째 하드디스크를 hd0에서 hd1으로 하기로 한건지, 또는 OS X El Capitan 때문에 발생한 문제인지는 확실하지 않다.