UbuntuToGentooMigrationComplicatedHowTo

깊이있는 삽질 Ubuntu Korea Community Wiki
이동: 둘러보기, 검색
Pictogram-virtualisation-orange-hex.svg
  작업 중인 문서!

  미완성이며, 디자인이 완성되지 않았거나, 아직 채워지지 않은 내용이 있어 여러분의 참여가 필요한 문서입니다.

Exclamation.png
  주의 참고 문서!

  내용의 일부 또는 전체가 검증되지 않아 잠재적 유무형의 손실을 유발할 수 있는 문서입니다.

GeekInside.jpg
  변태주의!

  지나치게 비정상적(?)인 사용법 등을 나타내는 문서입니다. 기본적인 지식이 없을 경우 알아듣지 못할 가능성이 있습니다!!!

경고[편집]

  • 한 시스템에 두 개 이상의 패키지 관리자가 공존하면 돌이킬 수 없는 문제를 일으킬 수 있으니 젠투 리눅스로 설치했다가 다시 우분투로 돌아갈 생각이 있다면, 뒤로 가기 단추를 누르시는게 좋습니다.
  • 이 문서는 참고 용도입니다. 모든 부분을 신뢰하고 따라하시다 발생하는 문제는 본인에게 있습니다. 취하려는 행동의 의미에 대해 정확하게 파악하는 상황이 아니라면 절대로 시도하지 마십시오. 그래도 시도하시겠다면, 본인의 책임임을 인지한 상태에서 이 페이지의 토론장에 질문하시고 예상 결과를 반드시 확인하신 후 진행하십시오.
  • 완성되지 않은 문서입니다. 아직 활용의 가치가 없으므로 "뒤로 가기" 단추를 눌러주십시오. 문서가 완성되면 이 안내 문구는 제거됩니다.

소개[편집]

우분투 배포판은 배포판의 모토에서 밝혀진 바와 같이 만인을 위한 배포판이며, 심지어는 닭도 설치할 수 있다[1]는 데비안을 계승했습니다. 간단히 말해서 생각없이 쓰기엔 정말 좋은 배포판이 우분투입니다.하지만 12.10이후로 이런 공식이 깨졌죠. 네, 어쨌든 이 문서는 여러분을 악마의 길로 이끌어드리는게 목적입니다. 우분투에서는 얼마나 많은 선택의 길이 있을지 모르겠지만, 젠투는 말 그대로 "정답이 없는 세계"의 결정체입니다. 젠투는 선택의 세계이며 도전의 세계입니다. 스스로 경험해보지 않으면 진정한 "자유"를 체험해 볼 수 없습니다. "자유"가 좋아서 젠투로 넘어오시는 분들이 있지만, 그들에게도 "자유"를 경험하는 댓가로 그에 따른 무수한 책임이 떨어지는 잔인한 배포판이기도 합니다. 과연 이렇게 있는 그대로 써도 전혀 문제가 없는(?) 우분투에서 살아남을 것인가, 궁금하다 못해 등짝이 가려워서 멘붕이 오더라도 젠투를 건드려서 일단 무언가라도 해보겠는가 ... 에 대한 여부는 여러분의 선택입니다. 그에 따른 책임은 그 어느 누구도 질 수 없습니다. 내가 전혀 다루어보지 못한 영역에까지 들어가면서 이것저것 조금씩 건드려가면서 변화해 가는 쾌락을 맛보고 싶다면, 지금 들어오셔도 좋습니다.

농담아닌 농담을 첨언하자면, 우분투는 건드리면 건드릴수록 망가집니다. 그래서 우분투에서 뭘 튜닝같은걸 해보려고 하면, 중요한 부분을 슬쩍 건드리게 되는데, 이 순간이 지나면 꼭 엄한 곳이 한두군데가 맛이 가기 시작합니다. (이 때문에 "웬만하면 좀 있는 그대로 쓰지?" 라는 말이 여기서 나오기 시작합니다) 그런데 젠투는 반대입니다. 이미 망가져 있어서 컴파일 한다고 해서 끝나는게 아닙니다. 어느정도 조언이나 지침을 따라 설정해도 역시 내맘에 들지도 않고 제대로 동작이 안되는 경우도 있습니다. 계속 손을 보고 보고 또 보는 식으로 해서 끊임없이 손을 봐야 안 망가진 모양새가 잡힙니다. 속되게 말하자면 젠투는 쓸데 없이 유저 불량을 야기하는 원흉입니다. 악마죠. 그런데 분명 매력은 있습니다. 우분투에서 겪어보지 못한 별 희안한 경우를 겪어보면서 시스템의 구석구석을 살펴볼 수 있는 기회가 생기고, 이런 경험을 통해 유사한 문제가 생기면 손쉽게 문제를 고치고 해결할 수 있다는 점이 그것입니다. 그리고 이 모든 문제는 사람의 힘으로 해결하지 않습니다. "구글신"이 해결하죠.

마음의 준비가 되셨다면 이제 다음 단락으로 계속 읽어내려가셔도 됩니다. 우선 우분투에서 젠투로 넘어가기 전에 몇가지 알아두시면 좋은 내용이 있어 간단하게 짚고 넘어가도록 하겠습니다.

설치 준비[편집]

생각할 필요가 없는 요소 - 디스크 분할 및 포맷[편집]

하나의 시스템에서 디스크를 분할하여 리눅스를 두군데 이상의 디스크 구역에 설치해서 사용한다. 이것은 하나의 시스템에 여러가지 버전의 윈도우를 설치해서 쓰는것과 비슷합니다만, 본질적으로 다른 면이 있다면, 윈도우는 버전이 바뀌면 시스템의 모든 파일의 내부 파일이 전부 바뀌고 디자인도 바뀝니다. 심지어 파일 시스템 구조도 바뀝니다. 그런데 리눅스는 배포판이 바뀐다고 해서 커널 버전이나 각 프로그램의 버전이 항상 다르다거나 하진 않습니다. 특히 같은 시기에 나온 다른 배포판을 설치하는 경우에는 커널 버전 뿐만 아니라 심지어는 내부에 설치된 라이브러리 바이너리 이런 요소들의 버전이 모두 같을 수가 있습니다.

구 버전의 커널을 공부한다거나 구 버전의 커널에 장치 드라이버를 만드는 방법을 만들어서 올리는 방법을 배운다거나 하는 개발이나 테스트 관련 몇 가지 특별한 이유 때문에 커널을 포함한 시스템의 각 구성요소의 버전이 완전히 다른 출시 시기 및 여러가지 특징면에서 판이한 서로 다른 배포판을 다른 파티션에 넣어 설치할 수도 있습니다. 이런 본질적인 이유가 아니라면, 취향의 문제이거나 애초부터 불필요하게 시스템 자원 낭비를 하는 것입니다.

그래서 이 지침서에서는 디스크 분할을 언급하지 않겠습니다. 애초부터 따로 설치할 여유를 두지 않겠다는 의미입니다. 왜냐면 이 문서는 우분투에서 젠투로 완전히 넘어오려는 모험을 감행해보려는 분을 위한 문서이기 때문입니다. 심지어는 gparted, gpt, mkfs 같은 프로그램의 사용 조차도 쓸모 없는 행위임을 인지하도록 해드리고자 합니다. 단지 여러분이 해야 할 일은 기존의 우분투/데비안에서 사용하던 apt 저장소 관리 시스템을 무력화하고 그 자리를 젠투에서 사용하는 portage(포티지)로 대체할 뿐입니다.

이 쯤에서 생각해보는 우분투의 강점[편집]

어쨌든 젠투로 시스템을 옮겨가려면 젠투 이미지를 받아야 합니다. 문제는 여기에 있습니다. "인터넷에 어떻게 연결을 하는가". 보통의 가정집에서라면 통신선을 뽑아서 랜카드에 꼽으면, 초기 가입 과정을 제외한 다른 모든 과정에선 컴퓨터를 켜자마자 랜카드의 맥주소와 연결된 전화국에 저장된 사용자 ID 비밀번호 세션 정보를 활용하여 자동으로 인증이 이루어집니다. 다만, 기업체나 대학교, 연구소 같은 경우는 보안을 위해 웹 인증 과정을 거치기도 합니다. 웹 인증 과정에서 ssl 연결을 통해 인증서 교환이 이루어지기도 하는데, 터미널 콘솔에서 사용하는 브라우저에서는 이 기능을 (애석하게도) 지원하지 않습니다. 따라서, 웹 인증을 해야 하는 곳에서는 부팅은 우분투 라이브 CD 같은 걸로 하고, 하드디스크를 직접 분할하고 초기화 하며, 마운트 과정을 거치고 나서, 네트워크 설정과 인증 과정을 거친 후에야 비로소 젠투 설치 과정에 들어갈 수 있습니다. 이 때 눈부시게 활약을 할 수 있는 매체가 바로 우분투 CD 입니다. 머신에 우분투를 설치해놓았다면 두말할 필요 없이 광미디어 이용시보다 상대적으로 우월한 성능의 강점을 취할 수 있습니다. 그냥 있는대로 쓰는게 더욱 편한 배포판이다. 라는건 바로 이러한 상황 또한 고려하던 중에 나온 이야기입니다.

데이터 및 설정 백업[편집]

어디까지나 중요한 것은 데이터와 설정의 백업입니다. 사용자 계정은 파티션을 따로 나누지 않았다면 굳이 물어볼 필요가 없이 당연하게 백업을 해야 합니다. 그 다음 특히 신경써야 할 부분은 /etc 와 /var 입니다. 여기는 시스템의 각종 설정과 서비스 데이터가 올라가는 부분입니다. 이들 디렉터리를 탐색하는 과정에서 불필요한 요소를 인지하고 발견하는 시점이 되면 이미 젠투 시스템이 안정적으로 올라갔을 때입니다. 그러므로 젠투로 옮겨가는 과정에서는 절대 함부로 임의의 하위 디렉터리를 삭제하는 일이 없도록 하십시오. 나중에 문제가 발생했을 경우 복구하기 힘들어질 수 있습니다. 어쨌든 언급해드린 부분을 임의의 장소로 안전하게 백업하십시오. 단, USB 플래시 메모리는 추천하지 않습니다. 이 주의 사항을 무시하다 문제가 생기면, 돌이킬 수 없는 인생의 막장길에 다다르게 될 지도 모릅니다. 만약에 마땅한 백업 수단이 없다면, 그냥 젠투를 포기하시는걸 추천합니다. 남은 인생동안 젠투를 선택할 기회는 매우 많습니다.

젠투 이미지 받기[편집]

어떤 매체를 통해서든 부팅을 했으면 웹 브라우저를 통해 다음의 주소를 주소 열기 창에 복사 및 붙여넣기 후 접근하십시오.

http://www.gentoo.org/main/en/mirrors.xml

여러가지 미러 사이트를 보실 수 있습니다만, 개인적으로 추천하는 곳은 lecl.net과 jaist입니다. Darkcircle (토론) 2014년 4월 25일 (금) 15:58 (KST)

예전에는 받으셔야 할 파일이 스테이지, 스냅샷 두 가지가 있었으나 현재는 스테이지 하나만 받으시면 됩니다.

스테이지는 /gentoo-mirror-root/releases/[ARCH_NAME]/autobuilds/YYYYMMDD/stage3-ISA-YYYYMMDD.tar.bz2 에 있습니다.

본 설치 과정[편집]

이미지를 적당한 장소에 압축 해제하기[편집]

스테이지에는 현재 시스템에 존재하는 바이너리와 중복되는 핵심 프로그램 일부(컴파일러, 인터프리터, 라이브러리, 유틸리티 등)와 패키지 관리 프로그램 포티지가 내장되어 있습니다. 시스템 복원을 고려하지 않는다면 루트 위치에 그대로 풀으시면 됩니다. 웬만하면 별도의 디렉터리에 우선 압축 해제 하실 것을 권합니다. 이 작업은 매우 위험합니다. ELF 바이너리와 여러가지 라이브러리의 의존성을 심하게 꼬이게 할 수 있으며, 실행 즉시 디스크에 기록되므로 복구가 불가능합니다. 스냅샷에는 배포판에서 지원하는 각종 패키지 목록이 있고, 각 패키지별로 빌드 설정이 담긴 ebuild 파일과 패치 파일 모음이 있습니다. portage에서는 이 목록 참조하여 소스코드를 내려받고 필요한 경우 패치를 내려 받아, 소스코드의 압축을 푼 후 패치를 적용해줍니다. 이후에는 사용자의 설정에 따라 각 패키지별로 configure와 make를 실행합니다. 현재는 별도의 스냅샷을 받지 않고 emerge-websync로 해결하셔도 됩니다. 지시 전까지는 포티지 트리를 절대로 동기화 하지 마십시오.

중복 요소 우선 삭제[편집]

일부 혹은 전체 충돌 가능성이 있는 sys, tmp, proc, media, mnt, dev, home, boot, opt, root, run 요소는 삭제하는것이 바람직합니다. 물론 여기서 삭제할 요소는 기존의 시스템에 있는 요소가 아닙니다. 스테이지3 꾸러미를 풀어서 나오는 파일 시스템 요소를 의미합니다. 만약 잘못 날리면, 어차피 일부는 Device is busy 라고 하면서 바로는 안 지워질게 뻔하지만, 재부팅할 때 골로 가는 수가 있습니다. 지우는 동작을 어떤 위치에서 행하고 있는지 충분히 검토하시고 실행에 옮기십시오.

필요 디렉터리 복사[편집]

지금 부터 시행하는 모든 절차는 루트 계정으로 진행해야 합니다.

  • 다음 절차에 따라 var 디렉터리 일부를 복사하십시오
#!/bin/bash

mkdir /var/db
cp -R ./var/db/pkg /var/db/.
cp ./var/db/Makefile /var/db/.
cp -R ./var/cache/edb /var/cache/.
cp -R ./var/lib/* /var/lib/.
cp -R ./var/log/* /var/log/.
  • etc 디렉터리를 통째로 복사한 후 기존의 백업 내용으로 다시한 번 덮어쓰십시오.
#!/bin/bash

cp -R ./etc /.
cp -Rf backup/etc /.
  • sbin bin usr lib32 (x86_64 의 경우 lib64와 lib 심볼릭 링크 포함) 디렉터리를 시스템에 덮어쓰십시오.

여기까지 잘 끝났다면 젠투 stage3가 성공적으로 올라간 상태일 것입니다.

make.conf 설정[편집]

종전에는 /etc/make.conf 위치에 있었으나 최근에는 배포판 설정 파일의 위치 일원화 과정을 통해 배포판 관련 설정을 /etc/portage/ 아래로 모두 옮겨, /etc/portage/make.conf 위치에 있습니다.

이 파일을 뜯어보자면 ...

# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
CFLAGS="-O2 -pipe"
CXXFLAGS="${CFLAGS}"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.
CHOST="x86_64-pc-linux-gnu"
# These are the USE flags that were used in addition to what is provided by the
# profile used for building.
USE="bindist mmx sse sse2"
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"

몇가지 경고문 주석과 함께 여러가지 징그러운 키-값 쌍이 있습니다. 눈치 빠르신 분은 아시겠지만 별거 없습니다. bash 쉘 스크립트의 일부이며 환경 변수의 모음일 뿐입니다. 젠투 시스템의 모든 부분은 적나라하게 홀딱 벗겨져 있습니다. 누구나 수정할 수 있고 재배포할 수 있습니다. 포티지 꾸러미 관리 시스템의 관리 유틸리티인 emerge 를 실행할 때 여기에 존재하는 환경 변수 값을 읽어들여 프로그램이 동작할 조건을 설정합니다. 빠진 의존성이 있으면 설치해주고, 이전 컴파일 방식으로 컴파일한 바이너리가 있다면 새로운 설정 방식대로 컴파일을 다시 진행합니다.

최신 버전을 활용하되 불안정함을 감수하겠다면 ACCEPT_KEYWORDS="~x86" 또는 (64 비트의 경우) ACCEPT_KEYWORDS="~amd64" 줄을 새로 추가하십시오.

라이선스의 제한을 받지 않고 자유로이 사용하려면 ACCEPT_LICENSE="*" 줄을 새로 추가하십시오.

프로세서 사양에 따라 MAKEOPTS 값을 추가하십시오. MAKEOPTS="-j2 -l4" 형식입니다. -j 값의 최적 값은 물리코어 수 + 1 (하이퍼스레드 기술 적용시 이 값의 2배), -l 값의 최적 값은 가상코어 수(하이퍼스레드 적용시 나타나는 코어 그래프 갯수) * 2 입니다. 예를 들어 i7-2600K의 경우 물리코어 4개가 있으며 하이퍼스레드를 지원하므로 MAKEOPTS="-j10 -l16" 입니다. 만약 물리코어가 6개라면 MAKEOPTS="-j14 -l24" 입니다. 그리고 # MAKEOPTS="-j1"을 추가해두십시오. (최근 버전의 boost 라이브러리 컴파일시 MAKEOPTS 문제로 컴파일이 안되는 문제가 있습니다. 해당 꾸러미를 컴파일 할 때 임시로 필요한 변수 입니다.) --Darkcircle (토론) 2014년 4월 26일 (토) 03:12 (KST)

CFLAGS-march 값을 바꿀 수 있습니다. 자세한 내용은 "gentoo CFLAGS" 키워드를 활용한 구글 검색 결과[2][3] 를 참고하십시오. CFLAGS는 본격적 설치 과정 전에 미리 바꾸시는 것이 좋고 바꾸시고 나면 emerge -e world를 한번 실행하셔서 시스템 전체를 빌드하셔야 합니다. 만약 CFLAGS 값을 바꾸었는데 계속해서 컴파일 오류가 발생한다면, 바꾼 값에 대한 컴파일러가 없거나 응답하지 않는다는 이야기이므로 원래 상태로 되돌리십시오. CFLAGS 값을 안전하게 바꾸는 방법은 기존의 줄에 # 기호를 붙여서 주석으로 만들고 해당 줄의 일부 내용은 베껴적으면서 필요한 내용만 바꾸는 것입니다.

시스템 컴파일시 언어 설정 일부도 여기서 할 수 있습니다. LINGUAS 변수가 이러한 역할을 맏습니다. 다만, 지금 하게 되면 컴파일에 문제가 발생할 수 있습니다. 일단 현재는 보류합니다.

최근 포티지 시스템에 변화가 일어나면서 python 설정을 제대로 해야 portage의 emerge 유틸리티가 문제 없이 동작합니다. 권장하는 값은 PYTHON_SINGLE_TARGET="python2_7"PYTHON_TARGETS="python2_7 python3_3", USE_PYTHON="2.7 3.3" 입니다. (이 설정 값은 공식 설명서에 없습니다.)

php의 경우에는 5.3, 5.4, 5.5가 동시에 배포판에 들어오면서 슬롯 관리를 하기 시작했습니다. 같은 이름이라도 버전이 다르면 별개로 취급하겠다는것입니다. 따라서 php를 설치하시면 5.3, 5.4, 5.5가 전부 설치됩니다. 아직 권장사항은 5.3이지만 필요에 따라 5.4를 쓸 수도 있고 5.5를 쓸 수도 있습니다. PHP_TARGETS="php5-3" 또는 뒤 숫자를 4 또는 5중 적당한 값을 넣어 활용하십시오. --Darkcircle (토론) 2014년 4월 26일 (토) 03:56 (KST)

ruby의 경우 1.8 1.9 2.0 2.1 2.2가 있는데 최근 1.8버전은 개발 및 유지보수가 안되어 접혔고 나머지 1.9~2.2가 남았습니다. 그런데 현재 사용하는 버전은 1.9~2.1 됩니다. 대부분 무난한 설정을 원하기에 그냥 일단 다 적으면 됩니다. RUBY_TARGETS="1.9 2.0 2.1"

남은 설정은 USE 플래그입니다. 이 부분은 각자에게 맏깁니다. 참고로 bindist는 목록에서 빼두시는게 좋습니다. 어차피 빌드 설정 몇가지 바꾸면 시스템 전체를 다시 빌드해야 하는건 마찬가집니다. 이후 설정은 젠투 핸드북 공식 한국어 번역 1부 6장 베이스 시스템 설치편 부터 참고하시면 됩니다.

포티지 트리 동기화[편집]

포티지 트리를 동기화 하는 방법은 약 두가지가 있는데 하나는 rsync를 통한 동기화 방법이고 하나는 http 프로토콜을 통한 동기화 방법입니다. 전자의 경우는 내부망의 사정에 따라 실패할 수도 있습니다만 성공한다면 그대로 진행합니다.

# emerge --sync

만약 이 방법이 안된다면 다음 방법을 수행합니다.

# emerge-webrsync

어쨌든 두가지 중 한가지가 되어야 합니다. 두 명령 전부 안되면 인터넷 연결 설정부터 다시 하셔야 합니다. 이 방법에 대해서는 여기에서 다룰 내용을 벗어나므로 설명하지 않겠습니다. 인터넷 연결 방법에 대해서는 포럼이나 페이스북에서 질문하십시오.


  1. https://kldp.org/node/42698
  2. https://wiki.gentoo.org/wiki/Safe_CFLAGS
  3. http://www.gentoo-wiki.info/Safe_Cflags