인텔 맥에서 부트캠프 이용 시, 가상화 안되는 문제 해결 – 시스템 무결성 보호 비활성화

지금 뭐 여러모로 돈이 나갈 일이 많아서 오랫동안 써오던 맥북 프로 15인치 2015 버전에다가 부트캠프를 쓰고 있습니다. 그리고 거기에 윈도우를 설치해서 쓰고 있죠. 아직 전 윈도우 개발이 주인 개발이 여럿 있어서요…ㅠㅠ

그런 와중에, 언제부턴가 가상화가 사용할 수 없는 현상이 발생하더군요. 테스트 머신인 가상머신이 있는데…. 그걸 써야 되는데…왜…..ㅠㅠㅠㅠㅠㅠㅠㅠ

안돼....ㅠㅠㅠ
안돼…ㅠㅠ

그러던 와중에, 맥을 쓸 일이 있어서 맥으로 부팅을 해서 맥을 업데이트 하고, 여러모로 작업 후 다시 윈도우로 돌아와도 안되더군요….ㅠㅠ

‘보통 맥을 쓰다가 다시 돌아오면 된다고는 하던데…뭐지….ㅠㅠ’

하다가 발견한 녀석이 있었으니,

바로 시스템 무결성 보호라는 녀석이었습니다. 설명에 대한 것은 링크로 달아뒀습니다.

OS X El Capitan과 iOS 9에 적용된 오래된 기술이더군요. 간단히 말하면, 유닉스 기반의 운영체제이기 때문에 rm -rf / 같은 명령어면 그냥 시스템 싹 다 날려먹고 그럴 수 있으니, 그걸 보호하기 위해 root 권한을 무시하는 루트리스(rootless)라는 녀석을 쓰는 거더군요.

이러면 root 권한이 있더라도 쉽게 변경할 수 없도록 되었고, 그 안에는 애플 소프트웨어 업데이트와도 연계되어 있어서 업데이트가 꾸준히 되어서 항상 시스템 관련된 부분을 보호하는 형태가 되는 것입니다.

써놓은 거 보면 그냥 SELinux라고 보면 이해가 확 될 겁니다만… 그게 뭐야 씹덕아 라고 하면…ㅠㅠ

SELinux 정도는 알아야 합니다! (퍽!)

뭐, 그 덕분에… 솔직히 그냥 아무 잘못없이 시스템 망가지는 건 있을 수 없게 되긴 했습니다. 일반 이용자 입장에서는요…

대신 아마 시스템 유틸리티나 그쪽 관련된 개발 하던 사람들은 그냥 포기하고 나가지 않았을까 싶은데… 생각보다 코드 인젝션 처리해서 유틸리티 만들던 사람들이 많아서요. 그게 불가능한 상황이니 그냥 개발 포기하는 그런 형태가 되었을 꺼 같군요.

근데 이녀석이, CPU의 가상화 기능과도 연관이 있더군요. 하긴, 프로세서 관련된 것들은 보호받는 쪽이 제조사나 os 제공자의 입장에서는 확실히 문제가 없는 거니깐요…

뭐, 좀 잡설이 길었는데, 이거 해제하는 방법은 간단합니다.

초기 부팅할 때, 전원 누른 다음에 Command + R을 누르면 복구 모드에 들어갑니다. 그때에 터미널을 열어서 다음과 같은 명령어를 입력하면 됩니다.

csrutil disable

다시 설정하려면 아래와 같이 입력하면 됩니다.

csrutil enable

어렵지 않죠? 그렇게 해서 다시 가상화가 사용되게 되었습니다. ㅠㅠ

평화로운 개발 환경이 다시 왔습니다. ㅠㅠ

빅서의 농간 – 버추얼박스 데리고 버그 보여주지마! ㅠㅠ (You must specify a machine to start, using the command line. 같은 개소리)

버추얼박스 가지고 늘 일상적으로 윈도우 환경에서 여러 작업이랑 테스트(지금 운영체제 개발 삽질을 윈도우에서 하는중..)를 하는데…. 뭣모르고 눌렀는데 저런 메세지가 나와서 황당했다. ㅇㅅㅇ;;;

진심으로 이 소리 하면서 바로 당장 구글링을 하니…

재설치?

ㅈㄹ….

하지마셈.

저런 개소리나 계속 나오는데….. 정작 원인은 다른 데 있었다. 원인 찾아내는 데 있어서는 오랜 시간 걸리지 않았다.

위에 그림에서 처럼 보면 버추얼박스를 독에 미리 올려놓은 녀석(빨간색)과 실행시마다 실행중인 아이콘이 독에 올라오는 녀석(녹색) 아이콘이 나타나는데, 이게 종료가 되어도 저 녹색 아이콘은 계속 남아있는다. 이때, 저 녹색 아이콘으로 실행하면 저 오류가 무조건 뜬다. 반면에 빨간 아이콘으로는 정상 실행된다.

이거 알고나서 얼마나 어이가 없었는지 진짜….

밑에 녹색 아이콘은 전에 실행했던 가상머신 관련 쑛컷이었던 거다. 그러니 저걸로 직접 실행하려 하니 저 아이콘으로 이용했던 실행처리 문제가 있으니 vm을 직접 실행하려면 커멘드로 다음과 같이 처리하라는 그런 건데…

…..ㅅㅂ 무지하게 헷갈리게 보인다….

저거 헷갈릴 거 같으면 독 설정에서 Dock에서 최근 사용한 응용 프로그램 보기에 대해서 선택을 안하면 된다.

….순간 뭣모르고 클릭해서 발견한 오류지만…. 저런 어정쩡한 버그나 보여줄 거 같으면 그냥 넣질 마라….

사람 농간하는 것도 아니고 원…ㅠㅠ

버추얼박스가 Big Sur랑 손잡고 나한테 kernel driver not installed (rc=-1908) 오류를 던져줘서 삽질하게 만들었다.

지금 일땜에 쓰고 있는 맥북이 있는데… Big Sur로 업뎃해줌. 2015년 15인치 맥북프로인데 이건 별 문제 없겠지 싶었고.. 문제 생겨도 영어 되니깐. (응?)

근데 워낙 빅서 저녀석이 문제가 많다는 걸 들어서 전에 작업할 때 쓰던 데이터들 싹 다 백업뜨고 나서 그냥 usb 만들어서 클린 인스톨을 진행했다. 그리고는 하나하나 지금 다시 설치하면서 진행중인데…. 버추얼 박스 깔고, 전에 쓰던 윈도우 가상머신을 불러와서 윈도우에서만 하는 코드 작업을 진행하려 하는데…

하는데….

뭐야 이 오륜…?!!!?!?!

찾아보니깐 맥에서 모르는 프로그램에 대해서 실행 권한 필요한데, 안주면 이게 커널쪽에서 필요한 녀석을 처리하질 못해서 생기는 오류라고 한다. 즉, 시스템 바닥까지 가서 처리해야 하는데(가상머신들 가상화니 당연하겠지…) 그걸 못해서 그런거다.

뭐, 해결 방법이야 간단하다. 이걸 실행하는 곳에서 보안 및 개인 정보 보호에서 허용하면 되는 것. 그냥 제어판 열고 하려는데…

훗, 이제 허용만 하면…

?!?!!!?! (이때 마침 바탕화면도 시간 지나서 랜덤으로 바뀐..)

있어야 할 게 없다?

내 눈이 이상한 게 아니었다…?!

이걸 찾아보니깐 처음에 설치하고 실행했을 때에 떴는데, 그때에 바로 안하면 빅서에서는 두번의 기회따윈 없단다. 30분 뒤에 다시 튀어나온다는 포럼글도 있었는데… 웃기는 소리. 한시간을 기다려도 안나타난다. 뭔 근거로 쓴 포럼글이었던 건지 따지고 싶었다…. (액션이 있어야 뭐낙 반응하는 녀석일텐데 그게 시간지나 나온다는 건 그것도 이상한 거 아냐…?)

이거 해결법은 그냥 버추얼박스 깨끗하게 지우고 다시 설치하는 것이다. ㅠㅠ

그래서 버추얼박스 인스톨러 받아서 그 안에 있는 언인스톨러를 터미널로 실행해서 깔끔하게 지워주고(이거 중요!!!! 버추얼박스는 절대로 그냥 휴지통에 던지면 안된다. 맥용 클리너들 가지고 처리되겠지 생각하기도 뭐하니 언인스톨할 때에는 저 스크립트 꼭 터미널에서 돌려라.) 나서 다시 설치해주고 나니 저렇게 세부사항이라고 뜬다. 저 안에 보면 버추얼박스 허용하도록 하는 체크박스가 있는데, 체크해준다. 그렇게 적용하고 나오면 필요에 따라서는 시스템도 다시 시작한다.

이게 이렇게 바뀌어있는 것이 Big Sur의 특징인듯 한데…..

저거 적용하고 나니 시스템 다시 시작한다고 메시지 떠서 OK 눌렀더니 iTerm2 끄려고 하는 상황이다. 내 경우에 진짜로 시스템 재시작을 진행했었기 때문에 시스템 재시작에 대한 내용을 적은 것….

그렇게 재시작을 하고, 다시 작업하려고 가상머신 불러와서 보니…

나한테 왜그래 대체….ㅠㅠ

근데 알고보니깐 버추얼박스 익스텐션 다시 설치해야 하는데 안해서 그랬던 거다. ㅇㅅㅇ;;;

설치 다 하고 나서 실행 후에 버추얼박스 드라이버 툴도 업뎃…

….이게 빅서가 나한테 던져준 첫번째 오류이긴 한데…. 의외로 골때렸다. ㅇㅅㅇ

윈도우, 맥, 리눅스에서 동시에 사용 가능한 파일 시스템은 있을까?

지금 규링의 경우에는 윈도우, 맥, 리눅스를 동시에 쓴다. 집에는 윈도우 깔린 i7-3770k 오버클럭하고 램 32GB 박고, 660 ti SLi 박아놓고, SSD 캐시 기능을 쓰면서 도합 16TB가 탑제되어 수냉으로 냉각하는 적절한 사양(?!)의 컴과, 맥북 프로 레티나와 우분투용 머신이 있다. (데탑, 서버) 그리고 연구실에서도 아이맥과 우분투 데탑이 있다. 이러다 보니 세곳에서 쓰이는 파일 시스템이 다 달라서 서로 공유하기가 힘든 점이 있다. 그냥 파일 얼마 안되고 하면 FTP나 서비스에서 지원하는 프로토콜과 적절한 인코딩으로도 파일 전달이 되긴 한다만… 그래도 외부에서 스토리지로 연결해서 쓰고 싶을 때가 꼭 있다.

근데 여기서 문제가 발생하는데… 이 세 시스템에서 적절하게 써먹을 파일 시스템이 있는지 없는지 모르겠다는 것이다.파일 시스템이 다른 경우에는 읽기는 되는데 쓰기가 안된다거나, 둘 다 안되어서 인식 자체가 안된다거나 하는 경우가 수두룩하기 때문이다. 당장 주변을 둘러보자. 윈도우에서 쓰는 외장하드 들고 가서 맥북에 연결했더니 파일이 안써진다고 하는 친구들 하나쯤은 꼭 볼 수 있을 것이다. (그만큼 요즘 맥북 많이 들고 다닌다. 맥 OS를 쓰는지는 의문이지만…) 사실 파일 시스템이 윈도우만 쓰면 잘 모르는데 유닉스나 리눅스, 맥으로만 넘어와도 뭐 이리 많나랑 생각 쉽게 하는 녀석이다보니 뭐….

일단 윈도우와 맥에서 동시 사용 가능한 파일 시스템으로 ExFAT가 있다. 맥에서 디스크 유틸리티를 통해 ExFAT로 포맷을 하면 윈도우에서도 읽기 쓰기가 된다. USB 같이 FAT를 써도 되는 정도의 용량이라면 모를까, 외장하드를 쓰는 입장에서는 확실히 매력적인 파일 시스템이다. (그러니 이 글 읽는 여러분도 한번 해보세요)

근데 이게 리눅스에서도 적용 되나…?!?! 난 그전까지 못들어 본 거 같은데?!?! ㅇㅁㅇ?!?! 그렇다면 바로 뒤져보는 거다. 검색!!!!!

우분투의 경우에는 아래에 적어놓은 명령어 세 줄이면 끝난다.

sudo add-apt-repository ppa:relan/exfat
sudo apt-get update
sudo apt-get install exfat-fuse exfat-utils

12.04 이후에는 아무런 조치 없이 자동으로 마운트 되는 걸로 봐서는 문제없이 쓸 수 있는 것으로 보인다.

일단 이렇게 하면 윈도우, 맥, 리눅스에서 동시에 쓸 수 있는 외장하드를 만들어서 쓸 수 있다. 맥 사용자의 경우에는 NTFS 읽고 쓰는 퓨즈를 유료로 구입해서 쓰는 사람들도 많은데, 이런 것을 안다면 돈주고 구입하지 않고 쓸 수 있다. 다만 모르는 사람이 아무거나 막 꼽으면 그땐 왜 안되냐고 물어보고 하겠지. ㅡㅅㅡ

터미널에서 특정 폴더에 디스크 이미지 마운트하기

이전에 쓴 Case-sensitive partition 생성에 그냥 이어서 진행합니다.

디스크 이미지를 마운트 하는 것도 hdiutil을 이용합니다. 작업 순서는 다음과 같습니다.

  1. 마운트할 폴더를 생성한다. 본인이 쓰기 편한 폴더를 만들어서 거기에 마운트 시키면 된다.
  2. 해당 폴더에 아래 명령어를 입력하여 마운트를 시킨다.

hdiutil attach ~/ext_disk.dmg -mountpoint ~/ext_disk

위에 처럼 디스크 정보를 보여주면서 출력 되면 마운트가 된 상황입니다.

근데 이게 글 하나를 쓸 정도의 내용인가요?

이거 자기가 뭔 작업했는지 모르면 무지 헷갈립니다. ㅇㅅㅇ;;

제가 제 홈폴더에 직접 작업을 했습니다. 이걸 파인더로 열어서 보면 어떤 상황일까요? 그냥 ext_disk란 폴더랑 ext_disk.dmg 파일 있겠지라고 생각하시겠죠?

 

GUI로만 보면 모릅니다. ㅇㅅㅇ 저기 밑에 보면 untitled 라고 되어 있는 장비에 있는 것이 마운트 된 것이라는 건 누구나 알겠지만, 저 홈폴더 밑에 목록에 똑같이 untitled라고 나와 있는 것이 ext_disk 폴더라는 것은 모를 수 있습니다. 이걸 터미널로 확인해 보죠.

ext_disk 라고 제대로 폴더 표기도 되어있죠? 저기로 이동하면 그대로 파일 쓰고 할 수도 있도록 되어 있습니다. 리눅스에 익숙한 분들이라면 이런 사용방법 좋아하실지도요. ㅇㅂㅇ;

저도 첨에 뭐가 뭔지 몰랐던 바보같은 짓을 했었기에 한번 알려드리려고 적어봤습니다.

p.s. 규링은 첨에 삽질 많이 합니다….
p.s.2. 이건 일본의 어떤 이상한 용자 블로그에서 찾은 글인데.. 저기에 공개 키 이용해서 맘대로 마운트 못하게 하는 디스크 만들고 거기다 ㅇㄷ 넣는 인간들도 있다고 합니다. (왜그러냐..)

Case-sensitive partition 생성

이전 글에서 대소문자 구분 가능한 파티션과 그렇지 않은 파티션이 있다고 대충 알려만 준 상태인데… 그럼 대소문자 구분 가능한 파티션을 일일이 디스크 관리에서 만들고 해야 할까요?

아뇨. 터미널 열고 명령어 한번만 치면 dmg 이미지 파일(디스크 이미지 파일)을 쉽게 만들 수 있습니다. (생성 시간은 좀 걸립니다)

hdiutil create -fs ‘Case-sensitive Journaled HFS+’ -size 40g ~/ext_disk.dmg

맥 OS X에서의 이미지 생성 툴인 hdiutil 명령을 이용하여 생성할 수 있습니다. 사용 방법은 이 링크를 클릭하시면 애플 개발자 센터 문서를 보실 수 있습니다. 내용이 많기 때문에 우선 명령어로 쓴 부분만 간단하게 설명을 드리기로 하죠.

  • -fs [파일시스템]: 파일 시스템을 적습니다. 오타 하나라도 나면 안되기 때문에 반드시 문서를 보고 쓰셔야 합니다.
  • -size [용량]: 디스크 이미지 파일의 용량을 지정합니다. 고정 용량이기 때문에 저처럼 바로 40g로 잡고 하면 디스크 용량이 40G 줄어들어 있을 겁니다. ㅇㅅㅇ;;
  • [파일 이름]: 생성할 파일 디렉토리와 파일 이름을 지정해 줍니다.

스크립트를 실행한 후에 파일이 생겼는지 확인했습니다.

 

용량 제대로 먹고 있습니다. ㅇㅅㅇ;;

그럼 이걸 마운트 해서 써야겠죠? GUI 에서 마운트 하는 것이야 더블클릭 하면 됩니다. 그리고 Volume 폴더에서 찾아서 들어가면 됩니다. 그러나, 리눅스와 유닉스 같이 원하는 폴더에 마운트하여 쓸 수도 있습니다. 그 방법을 알려드리겠습니다.

case-preserving but case-insensitive

맥 OS의 파티션에 대해서 알아볼 때, 다음과 같은 경우를 볼 수 있습니다. (디스크 관리에서 파티션 설정하고 포맷할 때 보실 수 있습니다.

 

Mac OS X 확장에 보시면 한글로는 대소문자 구분이라고 되어 있죠. 근데 아마 여러분이 처음 사신 맥의 파티션에는 대소문자 구분에 대한 것이 안되어 있는 그냥 일반 저널링만 된 파티션이 보일 것입니다.

근데 이게 제가 쓰면서 알게 된 글의 대상이 되었습니다. 바로 다른 소스에 크로스 컴파일을 할 때(특히 리눅스에서만 동작하는 소스들)을 쓸 때 여러모로 문제가 되더군요. Git같은 버전관리 시스템의 경우에도 대소문자 구분되는 파티션 시스템에서 처리되는 것과 아닌 것에 대해서는 동작이 전혀 다르게 돌아가기도 합니다. (잘 되긴 하죠. 근데 몇몇 분들처럼 warning을 보기 싫다면 파티션 같은 부분도 고려해야 합니다만..)

이번에 제가 리눅스 커널 소스를 맥에서 빌드해 보면서 case-sensitive 파일시스템을 사용한 디스크 파티션이 필요해서 여러모로 알아보다가 이게 차이가 있는 녀석이란 걸 알게 되었습니다.

다음 글에는 case-sensitive한 파티션을 만들어서 쓰는 방법을 소개해 드리겠습니다.