'Computer'에 해당되는 글 108건

php_screw-1.5/php_screw.c:124: error: ‘struct _zend_compiler_globals’ has no member named ‘extended_info’
php_screw-1.5/php_screw.c: In function ‘zm_shutdown_php_screw’:
php_screw-1.5/php_screw.c:133: error: ‘struct _zend_compiler_globals’ has no member named ‘extended_info’
make: *** [php_screw.lo] Error 1

이러한 에러가 날 경우, 위의 에러메시지의 라인 124, 133을 찾아보면 CG(extended_info) = 1; 라고 적혀있는데, 이것을 주석처리하거나 삭제한 뒤, 다시 make 하면 된다.
블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,
내가 현재 관리 중인 서버의 iptables 정책을 공개한다. 공개해서 개선/유지/보수 하는 것이 목적.
이상없이 돌아가고 있기 때문에 그대로 쓰면 된다.

#!/bin/bash

#################################################################

# Title   : A simple firewall for home users #

# Version  : 1.1 #

# Tested-on : ubuntu 11.04//sbin/iptables v1.4.4 #

# Author  : Brian Jung (09/17/2011) #

# Copyright : N/A  #

# Note   : Thanks to Ubuntu Korea users #

#################################################################


##[ COMMON ROUTINE ]##############################################

## Variables ##

##################################################################

HOME=$(ifconfig -a eth0 | awk '/(cast)/ { print $2 }' | cut -d ':' -f2 | head -1);

iPGroup_BLACKLIST="";


# Block Services - 닫을 포트를 여기에 추가한다.

portGroup_KNOWN_SERVICE="21 23 25 53 69 79 87 110 111 161 512 513 514 515 540 631 1080 1214 2000 2049 4288 5000 6000 6001 6002";


# Must be open for SSH
port_SSH="22";


##[ COMMON ROUTINE ]##############################################

## Initialize ##

##################################################################

#........................................remove previous policies

/sbin/iptables --flush;

/sbin/iptables --delete-chain;

/sbin/iptables --zero;

/sbin/iptables --table nat --flush;

/sbin/iptables --policy INPUT ACCEPT;

/sbin/iptables --policy FORWARD ACCEPT;

/sbin/iptables --policy OUTPUT ACCEPT;


#.....................................................DROP::ALL

/sbin/iptables --policy INPUT  DROP;

/sbin/iptables --policy FORWARD DROP;

/sbin/iptables --policy OUTPUT DROP;


#......................................ACCEPT::incoming traffic

/sbin/iptables --append INPUT --in-interface lo --jump ACCEPT;


#......................................ACCEPT::outgoing traffic

/sbin/iptables --append OUTPUT --jump ACCEPT;


#..............................................................

##[ COMMON ROUTINE ]##############################################

## Start using internet(TCP,UDP) ##

##################################################################

#............................................ACCEPT::INPUT::ALL

/sbin/iptables --append INPUT --in-interface eth0 --match state --state NEW,ESTABLISHED,RELATED --jump ACCEPT;

/sbin/iptables --append INPUT --in-interface eth0 --match state --state NEW,ESTABLISHED,RELATED --jump ACCEPT;


#..............................................................

###############################################################

## Customized area(WARNING::DO NOT USE '--destination-port') ##

###############################################################

#..............................................DROP::black list

for IPLIST in $iPGroup_BLACKLIST

do

/sbin/iptables --table filter --insert INPUT --protocol tcp --source $IPLIST --destination $HOME --jump DROP;

done;



#.............................................REJECT::KNOWN.PORT::STEALTH

for STEALTH_PORT in $portGroup_KNOWN_SERVICE;

do

/sbin/iptables --table filter --insert INPUT --protocol tcp --match state --state NEW,ESTABLISHED --source 0/0 --source-port $STEALTH_PORT --jump REJECT;

/sbin/iptables --table filter --insert OUTPUT --protocol tcp --match state --state ESTABLISHED --source $HOME --source-port $STEALTH_PORT --jump REJECT;

done;


#...................................................ACCEPT::ssh

for IPLIST in $iPGroup_USER_SSH;

do

/sbin/iptables --table filter --insert INPUT --protocol tcp --match state --state NEW,ESTABLISHED --source $IPLIST --source-port $port_SSH --destination $HOME --jump ACCEPT;

/sbin/iptables --table filter --insert OUTPUT --protocol tcp --match state --state ESTABLISHED   --source $HOME --source-port $port_SSH --destination $IPLIST --jump ACCEPT;

done;


##################################################################

## Block known attacks ##

##################################################################


#.............................................. DROP::port scan

/sbin/iptables --new-chain port-scan;

/sbin/iptables --append port-scan --protocol tcp --tcp-flags SYN,ACK,FIN,RST RST --match limit --limit 1/s --jump RETURN;

/sbin/iptables --append port-scan --jump DROP;


#....................................................DROP::ping

/sbin/iptables --append INPUT --protocol icmp --match icmp --icmp-type echo-request --jump DROP;

/sbin/iptables --append OUTPUT --protocol icmp --match icmp --icmp-type echo-reply  --jump DROP;


#.....................................DROP::no syn flood attack

/sbin/iptables --new-chain syn-flood;

/sbin/iptables --append syn-flood --protocol tcp --syn --match limit --limit 1/s --limit-burst 4 --jump ACCEPT;

/sbin/iptables --append syn-flood --protocol tcp --syn --jump DROP;


#..............................................................

##################################################################

## Log ##

##################################################################

#......................................................examples

#/sbin/iptables --append INPUT  --jump LOG --log-prefix "FIREWALL:INPUT ";

#/sbin/iptables --append FORWARD --jump LOG --log-prefix "FIREWALL:FORWARD";

#/sbin/iptables --append OUTPUT --jump LOG --log-prefix "FIREWALL:OUTPUT ";

#..............................................................

##[ COMMON ROUTINE ]###########################################

## End of traffic                      ##

###############################################################

#................................................can be omitted

/sbin/iptables --append INPUT --jump DROP;

/sbin/iptables --append OUTPUT --jump DROP;

#.............................................................. 
블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,
새로운 맥 OS X이 나왔다. 고양이과 최상위에 있는 동물, 사자님이시다.
고양이과 맹수들은 이제 나올만한 애들 다 나왔으니, 맥 오에스 '텐'은 10.7로 마지막이 되지않을까 싶다.
설마 Mac OS X Cat이 나오진 않겠지.

사용기, 리뷰, 달라진 점은 이미 수많은 유저들에 의해서 포스팅되고 있으니 난 서버에 대해서만 얘기하련다.
라이언 서버는 세팅방법이나 절차 등이 너무너무 간단해서, 내가 그동안 이 블로그에 축적해온 스노우 레퍼드 서버 세팅방법 (http://jswlinux.tistory.com/entry/Mac-OS-X-Snow-Leopard-사용노트)이 쓸모없어지게 될 정도다.
대부분의 서비스가 On / Off 버튼 외에 별로 건드릴 게 없다. 정확히 말하자면, 건드릴 수 있는 게 없다. 있다면 비밀번호 입력 정도?
서버데몬의 세팅의 심플함이 어디까지 가능한지 보여주는 극강의 "제어판"을 보여주는데, 세세한 세팅과 디테일한 커스터마이징을 좋아하는 유저라면 아주 답답하겠지만, 나같이 차려진 밥상에만 만족하는 유저들에게는 더 이상의 삽질이 필요없는 "가전제품"이 되었다.

일부 스크린샷을 올려본다. 보시다시피 건드릴 수 있는 게 거의 없다.
 






 
블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,
현재 울집 컴퓨터 구성은 다음과 같다.

케이블모뎀
애플 익스트림 베이스 스테이션

아이맥, 맥북프로, 맥미니 서버, 소니 바이오, 룸메이트 HP 노트북
아이폰 2대,
아이패드

그러고보니 참 많이 쓰긴 쓴다. 아무래도 이래저래 파일전송도 많이 하다보니 내부속도의 향상을 원했는데, 네트웍간의 파일전송속도는 다들 알다시피 초당 10메가 이상 넘어가질 않는다. 그래서 기가비트 네트웍에 대해서 알아봤다.

1. 먼저 기가비트를 지원하는 공유기/라우터/허브 가 있어야한다.
2. 컴퓨터의 LAN포트가 기가비트여야만 한다.
3. 인터넷 LAN선이 Category6라고 하는 CAT 6e 케이블이어야만 한다.

모두 구성하고 파일을 전송해봤다.
5400rpm이 장착된 노트북하드로의 파일전송속도가 초당 75메가나 나온다. 새로운 세상이다.
7200rpm이 장착된 데스크탑이나 다른 컴퓨터로 하면 이론상 속도인 초당 120메가도 가능할 것만 같다.

완전 신세계다.
블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

사실, 저는 맥빠이긴 하지만 애플빠는 아닙니다.

처음엔 누구나 그렇듯 아이팟에서부터 시작했습니다. 사실 아이팟을 쓰기 전에는 맥에는 관심도 없었거니와 본적도 없었던 생소한 물건이었죠. 처음엔 아이맥 내지는 맥북이 무지 갖고싶었지만 와이프님 허락이 안떨어져서, 아이팟만 사주시면 맥 사달라는 소리 안하겠노라 약속하고 쓰게됐습니다.


 

 그런데 역시 쓰다보니 맥이 갖고싶은 건 어쩔 수 없더라구요. 지름신의 빙의에 벗어나질 못하여 결국 2007년 11월에 대망의 iMac 20"를 장만했습니다.

 

 

그리고 맥을 3개월 쓰고나니 맥을 너무나도 사랑하게 됐습니다. 그래서 제 스스로 남긴 명언,

"맥 사랑한다, 리눅스 미안하다"를 남기고서는 맥 이외의 컴퓨터는 사지않겠노라 다짐하게 됩니다.

그리고선 애플 에어포트 익스트림 베이스 스테이션을 구매합니다.

 

 

드디어 애플에서 전화기를 만듭니다. 인기는 가히 폭발적이었죠. 1세대라고 불리우는 iPhone 2G를 구매합니다.

 

 

뭐, 지름신 유혹없이 잘 쓰는 듯 했습니다. 어느 날 갑자기 예상치 못하게 등장한 맥미니서버는 또 다시 지름신을 소환하더라구요.

드디어 아이폰, 아이맥에서 똑같은 iCal 스케쥴과 똑같은 주소록 리스트를 공유하게 됐습니다. 뭐 그 외에도 이것저것 서버로 운영도 하게됐구요. 그야말로 저희 집에서 리눅스 서버의 전원이 꺼지게 된 거죠. 그리고나서는 리눅스 서버로 쓰던 PC를 중고로 팔아버렸습니다. 

 


사실 아이패드를 구매할 생각은 없었습니다. 와이프가 게임용/영어동화책용으로 살짝 갖고싶어하긴 했지만, 그다지 필요하다는 생각까진 안들었고, 제가 생각해도 사봤자 크게 쓸 일이 없을 것 같았습니다.

하지만 저는 맥빠였습니다. 물론 여전히 애플빠는 아닙니다. ㅎㅎ


 

이제 진정한 맥빠의 완성형을 이루기 위해서는 노트북이 필요했습니다. 데탑/서버/전화기/태블릿이 있으니 마지막은 노트북이었겠죠. 맥프로는 한 5년 후를 기약하고, 아이맥도 데탑은 데탑이니깐요. 어쨌든, 뭐 사실 노트북도 그다지 필요는 없었습니다만 있으면 이래저래 쓸 일이 있겠다 싶었습니다. 그래서 15인치 맥북프로를 구매하게 됐습니다.

맥북에어는 사실 눈에 들어오지도 않았습니다. 전에 델미니9을 해킨토시해서 써봤는데 성격상 절대 못쓰겠더라구요. 제겐 사이즈보단 성능이 중요했거든요.



맥프로와 맥북에어를 빼면 애플 제품은 종류별로 하나씩은 다 있는 것 같습니다.

사실 남들한테는 난 맥빠일 뿐이지, 애플빠는 아니다! 라고 외치고 다니는데, 이렇게 놓고보니 애플빠가 따로 없네요. 사실 맥OSX은 무척이나 사랑합니다. VMware에 설치된 MS-Windows를 2주일에 한 번 킬까말까니깐요.



성격이 칠칠치 못해서 정리를 잘 못하고 삽니다. 사실 늘상 이사갈 여지가 있기도 하구요.

갖고있는 애플제품 전부 다 모아놓고 찍어봤는데, 찍고보니 잘 안보이네요.

 

이상입니다.

 

P.S 결정적으로 제가 맥으로 하는 일이 인터넷/음악,영화감상/채팅질이 전부입니다. ㅎㅎㅎ

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,
아직 나오기도 전부터 화제인 리눅스 배포판이 있다. 이름하야 맨하탄OS. 아마도 본인이 한국유저들 중에서는 처음으로 맨하탄OS의 프리뷰/리뷰를 하는 게 아닐까 싶다.
이 배포판이 내세우는 특징은 다음과 같다.

1. 우분투 기반
2. 아름다운 외형
3. Web Upd8, OMG!, Ubuntu! 등지에서 다루는 프로그램들이나, 리눅스 유저 사이에서 평판이 좋은 프로그램 다수 탑재

정도가 되겠다 (우분투 포럼에서 가져옴).

나름 기대를 좀 하고서 노트북에 바로 설치를 해봤다. 그리고 너무 실망한 나머지 5분 후에 지웠다.
설치과정을 보여드린다.

DVD를 넣고 부팅을 하면 아래의 메뉴에서 그냥 엔터키를 치자.



GRUB이 나온다. Live모드로 부팅해도 설치는 할 수 있으니 live나 혹은 install에서 원하는 것을 선택하자.



VMware에서 돌리다보니 너무 빨라서 스크린샷을 찍을 수 없었는데, 부팅화면이 Ubuntu 10.04랑 완전히 똑같다.
우분투 10.04에서 점 5개가 차례로 불이 켜지는 듯한 화면이 완전히 동일하게 나온다.  독창적인 화면을 기대했는데 다소 실망했었다.
부팅이 끝나고 나면 라이브모드 부팅시 아래처럼 노틸러스의 재시작을 요구한다. 드롭박스 때문인데, 인터넷에 연결이 안되어있으면 어차피 무용지물.



여기서 또 하나 크게 실망(?)한 게 하나 있는데, 매킨토시 유저 사이에서 널리 쓰이는 퀵실버와 완전 똑같은 프로그램이 실행된다는 거다 (퀵실버가 뭐하는 건지는 여기서 확인하자). 사실, 쓰기좋고 편리한 툴은 리눅스든 맥이든 어디든지 다 있어야 사용자의 편의를 위해 좋은 일이긴 하지만, 맨하탄OS라는 이름답게 내심 세련되고 뭔가 좀 독창적인 것을 기대했던 나에게는 허탈한 웃음밖에 나오지 않았다.



노틸러스 재시작을 누르고 퀵실버를 껐더니 드롭박스를 시작하라고 나온다. 인터넷 연결 안되어있으면 Start 눌러도 에러가 난다.



VMware상에서 설치했던 것이므로 인터넷이 연결되어있어서, 개인정보를 입력하는 화면이 나오는데 어차피 라이브 모드니까 입력해봐야 헛수고다.



바탕화면의 모습이다. 인스톨을 할 수 있는 메뉴가 보인다. 그 외의 설명할 것들은 설치가 끝나고 나면 다시 설명한다.



설치화면이다. 우분투랑 완전히 동일하기 때문에 그다지 큰 어려움은 없다. 왼쪽 언어리스트를 맨 아래까지 스크롤해보자.



한국어가 보인다. 클릭하면 한국어로 설치를 시작할 수 있다. 다만 화면에 보이는대로 폰트 설정이 너무 안좋은데, 아직 베타라는 점을 감안하더라도 출시 전부터 나름 화제를 모으고 있는 배포판으로서는 대체 폰트에 대해서 신경을 쓰는 건지 안쓰는 건지 의심스러울 수준.



타임존을 설정하는 화면이다. 본인은 (날씨만) 지상낙원에 살기 때문에 천국으로 설정했다.



역시 우분투와 동일한 메뉴다.



설치가 시작되면 아래와 같이 간략한 정보만 표시된다.



참고로, 설치 도중 화면 우측상단에 있는 X 버튼을 누르게 되면 아래와 같이 설치화면이 닫히는 어이없는 상황이 연출되는데 일단 백그라운드로 설치가 진행되고 있기 때문에 가만히 놔두면 끝날 때 메시지를 준다.



설치가 다 끝나고 재시작을 눌렀는데, 아래의 화면에서 더 이상 진행이 되질 않는다. 그래서 전원을 껐다켰다.



재부팅을 하게되면 GRUB 화면이 나온다. 아래의 화면은 VMware니까 상관없지만 처음 본인의 노트북에 설치할 때는, 노트북에 이미 설치되어있었던 윈도우7은 아예 무시해버리고 자기만 GRUB에 올리는 정말 황당한 화면이 나왔었다. 



로그인화면. 우분투랑 똑같다.



VMware이긴 해도 이것저것 프리뷰를 해보기에는 화면이 좀 작아서 해상도를 변경했다. 모니터 화면에는 아래와 같이 이미지가 깨져서 나온다.



설치가 완료된 맨하탄OS의 화면. 처음 보고 조금 놀란 것이 시스템은 우분투 기반이므로 GNOME이지만 바탕화면의 저 Desktop Folder라는 투명한 화면은 바로 KDE의 것이기 때문이다. 한 마디로 KDE랑 GNOME을 섞어서 둘 다 띄운다는 얘기다.



본인은, 바탕화면 꾸미고 테마 꾸미고 하는 부분에서 전혀 센스가 없고 그때문에 그런데 시간 들이는 게 아까워서 (그런게 또 하다보면 계속 하게되고 주기적으로 또 계속 바꿔줘야한다) 바탕화면도 기본화면, 테마도 기본테마만 쓴다. 따라서 어느 배포판이든 어느 OS든 첫인상과 기본 바탕화면/테마를 중요하게 생각한다.
개인적으로는 전체적으로 확실히 간지나고 예쁘고 화사한 KDE와 달리 GNOME은 좀 칙칙하고 투박하다고 생각는데, 저렇게 두 개를 섞어놓고 어울리지 않게 화면을 만들어놓으니까 정말 어색하고 이상하다 싶었다. 아래는 화면 좌측 하단의 시작(?)버튼을 클릭했을 때 나오는 메뉴.
Accessories, Games, Graphics, Internet, Office, Sound & Video, System, Windows가 있다.



그 시작버튼 옆의 아이콘을 눌렀을 때 나오는 메뉴.



또 한 가지 맨하탄OS에 놀란 점은, 어플리케이션을 띄우면 맥OSX처럼 메뉴를 어플리케이션으로부터 분리해서 메뉴는 화면 상단에 위치시키는데, 개인적으로 참 황당했었다. 따라하는 것까진 좋은데 적당히 배껴야지, 이건 뭐  맨하탄OS라는 이름에 맞지않게 퀵실버부터 파인더까지 완전 똑같이 배껴버리는데 너무 실망이 컸다.
삼성이 아이폰 따라잡겠다고 안드로이드 열심히 고쳐서 만들어낸 갤럭시S가, 결국 아이폰 메뉴구성이랑 다를 바 없이 완전 배껴서 만들어낸 듯한 인상을 받았던 것이다. 맥OSX 따라하면 다 세련되지나?
배껴도 너무 똑같이 배꼈다.



시작버튼의 Windows를 클릭하면 나오는 메뉴인데 WINE이 기본적으로 구성되어져 있어서 유저들에게 편의를 제공한다.



제어판은 나름대로 잘 구성되어있었고, 왼쪽의 그룹에서 카테고리별로도 출력이 가능해서 사용하기에 편리했다.



일단 우분투 기반이므로 한글화가 되어있지 않더라도 언어패치를 설치하는데는 이상이 없을 거라고 생각된다. 프리뷰 정도로 훑어봤는데, 물론 외형만 보고 판단할 수는 없겠지만 일단 개인적으로는 많이 실망한 배포판이다. 사실 그동안 써온 우분투에 다소 식상해있어서 뭔가 새로운 배포판을 찾았었고, 우분투 포럼에서 예전에 한 번 언급된 적이 있는 배포판인지라 테스팅해본다는 심정으로 설치했지만, 맥OSX, KDE, 그리고 GNOME을 짬뽕시켜낸 섞이지 않은 비빔밥 같은 배포판이라고나할까...

대충 훑어보고 5분만에 지워버렸다.
역시 우분투, 쿠분투, 젠투 외엔 아직까지 딱히 맘에 드는 리눅스 배포판이 없구나.
블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,
나는 맥빠다. 누차 내 블로그에 언급했지만 나는 맥을 사랑하는 맥빠다. 하지만 애플빠는 아니다.
애플빠와 맥빠는 분명 다르다. 다르다고 생각한다. 애플빠는, 애플에서 나오는 모든 제품을 열렬히 찬양하는 사람이라고 볼 수 있는 반면, 나는 오로지 MacOSX 하나만을 열렬히 사랑하는 맥빠다.
그럼에도 불구하고 애플에서 나오는 제품 다수를 갖고있다. ㅎㅎㅎ

뭐가 있는지 나열 좀 해볼까.
아이팟 나노, 아이팟 클래식
아이폰 2G 2대
2007년형 신형 아이맥 20"
2010년도 신형 맥미니서버
에어포트 익스트림 베이스 스테이션
매직 마우스

아이패드는 2달 후에 사기로 결정했다. 나보다는 와이프가 쓰고싶어하는 것이라서 구매하기로 했으면 분명 살 거다. 그러고보니 없는 것도 많네.
맥프로, 맥북, 맥북프로, 맥북에어, 아이팟터치, 아이팟 셔플, 시네마 디스플레이가 없다.
아이팟터치, 아이팟 셔플은 내가 가진 아이팟 클래식/나노와 아이폰에서 커버가 가능하니까 앞으로도 안살 것 같고, 맥북에어/맥북/맥북프로 중에서는 하나만 있으면 될 것 같고, 맥프로와 시네마디스플레이는 향후 5년 이내에 구매하는 걸로 목표를 세웠으니 이것도 언젠가는 살 것 같고...
본론으로 넘어가자.

맥은 엄연히 유닉스다. 인텔 맥에서 돌아가는 레퍼드부터 Single UNIX Specification, SUS에서 인증된 Open Brand Unix 03에 준하는 유닉스다. 그런데 리눅스만이 최고이고 리눅스만이 진리이신 분들이 그걸 용납하질 못하시겠단다. 참고로 나도 리눅스 빠라고 할 수 있는 사람이다.
리눅서들이 뭐라고 했을까?

s: 독특하군요. 애플이랑 유닉스랑 관련도 없는데 ㅎㅎ
e: 유닉스 기반이어서 그러지 않을까요? ㅎ
s: bsd 기반이지
e: FreeBSD
s: 유닉스는 아니라는
e: FreeBSD도 유닉스 기반이니.. 뭐..
s: 유닉스는 아니죠
e: 그러니까 기반..
나: 맥은 유닉스인데요...
s: 누가 맥이 유닉스레요?
나: 링크를 드리죠.
나: http://ko.wikipedia.org/wiki/단일_유닉스_규격
s: 저 자료는.. 애매하네요.
나: 애매하시면 unix.org에 항의를...
s: 인증 받은거라고 하니
s: 유닉스도 아닌 것이 유닉스인양
s: 인증 받으면 다 유닉스인가 보네
s: 좀 웃긴 거긴하네
s: bsd 가져와서 포팅한건데
s: bsd는 아니고 자기는 인증해서 유닉스라!
b: 유닉스 커널 쓴다고 유닉스라고 보긴 힘들텐데
b: 한때 POSIX로 유닉스 구분하던 사람들도 있었는데 그러면 윈도우도 유닉스라죠.

이 대화에서 아무런 대답이나 항의 등은 하지 않았다. 온라인에서 말싸움 하는 게 귀찮을 뿐더러 그럴 시간도 없고 어차피 되도않하는 말싸움 해봤자 시간만 아까울 뿐이고...
먼저, 내가 알기로 윈도우 2000은 한때 POSIX를 준수하던 시절이 있었다. 물론 XP부터는 아니라고들 한다.

이 대화에서 내가 하고싶은 말은, 맥이라고는 어떻게 생겨먹은지 인터넷으로 밖에 본 적이 없는 인간들이 어떻게든 맥을 까고싶어서 안달이 났거나, 지들이 쓰는 OS가 얼마나 잘났는지 지들이 만든 것도 아니면서 왜 그렇게 남이 쓰는 걸 못까서 난리인 건지 이해가 안간다는 말이다.

맥이 유닉스 인증을 받았건 안받았건 간에 내가 하고픈 말은, 지들이 아니라고 생각하면 아닌 거야? unix.org는 폼으로 있는 단체인가? POSIX는 동네 슈퍼 이름이야? 그렇게 할 말이 많고 지들이 맞다고 생각하면 직접 따지지, 왜 irc에 처박혀있는데? 
인증 받으면 다 유닉스인가 보네 <- 그럼 자네가 인정해야 유닉스인가? 대체 인증을 누가 해야하는데? 국제기관에서 인증해도 인정 못하겠다굽쇼? 
레퍼드가 단일유닉스규격 받은 게 말이 안된다고 생각하면 왜 unix.org에 항의메일 안보내는데? 영어가 딸려서? 중학교 때부터 대학교 졸업할 때까지 뭐했는데?
맥서버는 리눅스 서버랑 비교하자면 뭐 전혀 고려할만한 가치가 없는 쓰레기라고 하는데, 누가 맥서버로 사업하겠대? 웹호스팅 하겠대? 집에서 홈서버로 쓰겠다는데 무슨 쓰레기니 가치가 없다느니 말들만 많은지...

멍석 깔아주면 한 마디도 못하는 게 한국사람이란 거 다들 잘 알고있는 사실이지만, 국제기관에서 인정해준 사실이 지들 앞에서는 다 말도 안되는 헛소리고 이해가 안되는 상식 밖의 일이라는 거다. 물론 국제기관에서 인정하는 것들이 100% 정확한 게 아니고, 또한 기관의 결정이 진리가 아니라는 것 역시 모를만큼 바보는 아니다. 하지만, 어디까지나 나름대로 국제적인 표준을 심의/규정하는 기관이고 전 세계적으로 인정하는 사항이니만큼 결정이야 어쨌든 따라야하는 게 상식 아닌가?

축구에서는 오심이 한 번씩 생기는데, 대부분의 선수들은 이렇게 말한다.
"심판의 판정도 경기의 한 부분이라고 생각합니다"

이 블로그에서 내가 맥빠라는 사실은 누구나 쉽게 알 수 있을만큼 맥에 대한 찬양을 많이하고있는 본인이지만, 그만큼 리눅스도 좋아한다. 이 블로그에 몇 번이나 얘기했지만 나는 예전 한컴리눅스 사로부터 "대한민국 리눅스 발전에 기여한 20인"에 선정된 적이 있을 정도로 리눅스 활성화에 열렬한 사용자였다. 현재 인천 리눅스 동호회 운영진이며 한국 우분투 포럼 운영진이고 동시에 우분투 커뮤니티 공인 한국 컨택터이다. 또한, 한국 우분투 포럼 IRC의 방장이기도 하다. 
나는 오로지 블로그를 통해 내 생각을 말하는 것 외에는 결코 주위 사람들에게 맥이 최고다라고 말하지 않으며, 리눅스를 쓰지 말라느니 하는 말 따위는 하지 않는다. 게다가 리눅스가 단일유닉스규격에 맞지않는 OS라고 해서 리눅스가 유닉스가 아니라는 생각도 결코 해본 적이 없다.

최근에는 리눅스 유저들이 더 꽉 막힌듯한 사고방식을 보이는 사람들이 많아졌다. 서버관리하는 분들이 그런 생각 많이 하시던데, 맥서버가 서버로서 최고이고 적격이며 아주 우수한 플랫폼이라고 얘기하는 게 아니다. 단지 맥이 단일유닉스규격을 준수하는 유닉스라고 하니까 그냥 그런갑다 하는 거지, 왜 그걸잡고 비아냥거리면서 기관에서 승인받은 사실조차 지네들이 인정하네마네 하냐는 거다.

 말이 나온 김에 자격증 얘기 좀 해보자.
이러한 한국의 사회가 자격증 소지자를 무시하게 되는 거다. 일례로, 새로 들어온 신입사원이 리눅스 마스터 자격증이 있다고 치자. 뭐라고 할 건가? 대부분 이렇게 답할 거라 생각한다. 
"그거 있으면 뭐해?"
"그래서 니가 나보다 더 많이 알아?"

후자의 경우, 물론 아무리 자격증이 있다고 해도 경험에서 나오는 실력이 절대적으로 우위라는 건 부정할 수 없는 진리다. 그런데 전자처럼 자격증을 있으나마나하는 식으로 대접하다보니 결국은 이 사람이 객관적인 평가에서 합격을 했다는 일종의 자격이 아무 쓸모없는 휴지조각이 되어버리는 거다. 아마 우리나라 서버관리자들, 자격증 있으신 분들 별로 없을 거다. 물론 그런 거야 따라면 당장이라도 딸 수 있으실테고, 오히려 자격증에서 요구하는 것 이상의 실력을 갖고계실 거다. 

말을 하다보니 열받아서 횡설수설하게 됐는데, 정리한다.
본인, 불과 3-4년 전만해도 리눅스 밖에 모르는 리눅스 빠돌이였다. 96년도부터 리눅스 써왔고 나름 리눅스를 발전시키기 위해서 혼자라도 많이 노력해왔다.
지금은 맥 쓴다. 맥 정말 사랑한다. 좋은 건 나만 쓰고싶기에, 주위 분들 맥 쓰라고 권유하지 않는다. 하고싶지도 않다.
나도 리눅스 써왔고 지금도 리눅스 쓴다. 여전히 리눅스 좋아하고 여전히 리눅스의 발전을 위해서 대외적으로 노력하고 있다.

맥 까는 분들, 맥 까건 말건 내가 알 바는 아니라서 별로 상관 안한다.
그런데, 맥에 대해서 뭔가 마음에 안드는 게 있으면 나같은 유저들한테 말하지 말고 직접 나서서 얘기 좀 해달라. 맥이 단일유닉스규격 인증받은 게 마음에 안들면 unix.org가서 좀 따져달라. 윈도우 2000이 POSIX인 게 말이 안된다고 생각하면, POSIX에 직접 메일 보내서 따져라. 리눅스랑 비교해서 맥서버 쓰레기라고 하시는 분들, 뭐라고 하던 별로 상관없지만 맥 써보긴 했나? /etc 어떻게 생겼는지 구경은 해봤나?
못하겠으면, 어느정도 수용하고 인정할 줄 아는 자세를 갖춰라.

잘 알지도 못하면서 까는 것도 모자라, 그렇다고 지들이 생(착)각하는 게 진리인양 우기지 말자. 짜증난다.
블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,
수시로 업데이트함. 절대 불펌 금지

일반
일반 어플리케이션에서의 Home/End키 바인딩 (재부팅 불필요)
vi ~/Library/KeyBindings/DefaultKeyBinding.dict
{
/* home */
"\UF729" = "moveToBeginningOfLine:";
"$\UF729" = "moveToBeginningOfLineAndModifySelection:";

/* end */
"\UF72B" = "moveToEndOfLine:";
"$\UF72B" = "moveToEndOfLineAndModifySelection:";

/* page up/down */
"\UF72C" = "pageUp:";
"\UF72D" = "pageDown:";
}

VMware Fusion의 Disk IO로 인한 시스템 부하 해결
자주 안쓴다면 VMware 데몬을 꺼준다.
sudo vi  /Library/LaunchDaemons/com.vmware.launchd.vmware.plist 
11번째 라인 <string>--start</string>을 <string>--stop</string>으로 수정
이렇게 하고나면, VMware 구동시 미리 sudo /Library/Application Support/VMware Fusion/boot.sh --start 를 실행해서 데몬을 올려야한다.
이게 귀찮을시, 데몬이 떠있는지 안떠있는지를 검사해서 안떠있으면 띄우고 VMware를 실행하는 애플스크립트를 만들어서 응용프로그램으로 컴파일한다.
set isRunning to do shell script "ps -ef | grep vmnet | grep -v grep | wc -l |sed 's/ //g'"
if isRunning is "0" then
	do shell script "/Library/Application\\ Support/VMware\\ Fusion/boot.sh --start" with administrator privileges
end if 
tell application "VMware Fusion" to activate
 

 

터미널
터미널 로그인 메시지 (Message Of The Day): /etc/motd
iTerm 과 터미널을 그간 쭉 비교해봤지만 본인은 하드코어유저가 아니라서 iTerm이 뭐가 더 나은지 도저히 모르겠다. Visor와 결합된 Terminal.app은 최고!

/etc/bashrc  참고사항
alias ls='ls -vGF'
v는 한글표시, G는 컬러표시, F는 디렉토리 / 표시
젠투 스타일 PS1: PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\$\[\033[00m\]
여기서 w를 대문자로 적으면 "현재 디렉토리"를 표시.
터미널에서의 한글입력을 바로하기 위해 $HOME/.inputrc
set convert-meta off
set meta-flag on
set output-meta on
터미널에 나오는 호스트명 변경
sudo scutil --set HostName 이름 (PS1을 수정하는 게 더 나을 수도 있음)

Terminal.app에서의 Home/End키 바인딩
vi ~/.inputrc
# Be 8 bit clean.
set input-meta on

set output-meta on

set convert-meta off


# Auto completion options

set show-all-if-ambiguous on

set completion-ignore-case on


# Keybindings

"\e[1~": beginning-of-line       # Home key

"\e[4~": end-of-line             # End key

"\e[5~": history-search-backward # Page Up

"\e[6~": history-search-forward  # Page Down

"\e[3~": delete-char             # Delete key

"\e[5C": forward-word            # Ctrl+right

"\e[5D": backward-word           # Ctrl+left


그리고 Terminal.app를 열고 환경설정 cmd+, 열고 Setting -> Keyboard에서 아래의 항목을 찾아 변경
(더블클릭하면 변경할 수 있으며, \033 문자는 ESC키를 누르면 입력된다)
Home - send string to shell: \033[1~
End - send string to shell: \033[4~
Page up - send string to shell: \033[5~
Page down - send string to shell: \033[6~
Shift page down - scroll to next page in buffer
Shift page up - scroll to previous page in buffer

참고로 Home/End키가 없는 맥북 등에서는 Fn+화살표 키로 Home/End/PageUp/PageDown 작동됨.


서버공통
대부분의 서비스 데몬은 SSL을 사용하지 않더라도 켜줘야만 모바일 기기나 클라이언트들이 제대로 인식함
위키, 블로그, 서버: http://localhost
그외 서버들
웹메일 서버: http://localhost/webmail
아이캘 서버: http://localhost/ical
스노우 레퍼드 서버 설치가 끝난 뒤 첫부팅에서 설정시, 유저데이터와 서버 데이터를 다른 하드로 지정가능.
하지만, 나중에 재설치를 하게 되면, 다른 하드를 재지정할 수 없다. 한 마디로 무용지물.
(단, Netboot는 그대로 쓸 수 있다)

아이캘/위키/블로그 서버 등의 모든 css 및 이미지 파일은 /usr/share/collaboration/ 에 있으며,
메인 페이지 index.html에서 보여지는 css및 이미지 파일은 /usr/share/collaboration/css/serverhome_static 에 있음.

초기에 /etc/service에서 ssh 22번 포트를 변경하면 Server Preferences 작동 안되는 현상이 있었으나, 원상복귀 후 정상작동 확인. 그 이후에 다시 포트를 변경했으나 여전히 정상작동.

iLife09 설치하면 디렉토리 서비스 통째로 날려먹는다. 해결책은 타임머신을 통한 복구 혹은 재설치 이외엔 없다.
절대로 설치하지 말자.

SSL 인증서 때문인지 모르겠지만, 서버의 이름을 바꾸게 되면 아주 심각한 문제에 부딪치게 된다. 오픈디렉토리에 접근할 수 없는 현상이 생기는데, 웹서버의 경우 버츄얼 호스트 기능으로 다수의 도메인 네임을 가질 수 있지만 웹서버가 아닌 서버 자체의 이름 (처음 설치할 때 입력하는 서버이름)을 다른 이름으로 바꾸거나, 혹은 SSL 인증서를 다른 도메인 이름으로 만든 뒤 그것에 우선권을 주게 되는 경우 오픈디렉토리에 접근할 수 없게 되고 결국 로그인을 해야하는 모든 서비스를 이용할 수 없게 된다.

에어포트 익스트림 베이스 스테이션(이하 AEBS) 사용시, 맥미니서버가 AEBS을 Firewall로 간주/세팅.
다 좋은데, Server Preferences에서 On/Off 할 때마다 AEBS을 재부팅하기 때문에 불편.
맥(미니)서버에서 에어포트 유틸리티 실행시, AEBS의 포트포워딩 항목의 필요한 부분을 전부 등록해줘서 편하지만 만약 다른 맥/PC에서 에어포트 유틸리티를 실행하게 되면 맥(미니)서버에서 등록해준 포트포워딩 항목을 모조리 삭제.
서버에서 몇가지 일부 항목은 변경시 AEBS을 재부팅해야함.
AEBS가 재부팅되면서 포트포워딩이 모조리 off.

맥서버를 운영 중인 상황에서 다른 맥을 재설치하거나 새로운 맥이 로컬 네트웍에 접속시 맥서버로부터 메일/캘린더/주소록 등의 초대를 받게 되는데, 이걸 수락하게 될 경우
시스템 설정 - 계정 - 로그인옵션 - 네트워크 계정 서버 에 자동으로 조인된다. 네트워크 계정서버에 조인하게 되면 /Users/ 디렉토리의 퍼미션이 655로 바뀌면서 root로도 퍼미션 수정 및 접근 자체가 안되는 현상이 생긴다. 또한, /Users 안에 계정 폴더가 있음에도 불구하고 인식을 못하는 현상이 생긴다. 자세한 건 공부를 더 해봐야겠지만, 말 그대로 "네트워크 계정 서버"라서 계정을 원격으로 읽어오는 그런 것 같은데, 암튼 작동 불가능. 초대는 무조건 거절하고, 네트워크 계정서버에는 절대 조인하지 말 것.

서버 이름 지정시, 로컬 네트워크 이름은 그대로 두되 Primary DNS의 이름은 실제 도메인으로 서비스 중인 서버가 아니라면 절대 도메인을 지정하지 말고 내부 도메인을 줘야한다. 예:) server.private
다시 말해서, abc.com이라는 도메인으로 실제 서버를 운영 중이라고 하더라도 abc.com의 네임서버가 맥서버로 바로 지정되어있지 않은 경우는 주면 안된다. 주게되면 Xgrid, iCal Server Utility 및 Kerberos 인증 등 몇가지 서비스가 작동되지 않는다.


웹서버
확장자가 html로 끝나는 파일에 아무리 php코드를 넣어도 작동이 안될 경우 /etc/apache2/httpd.conf 파일을 열어 AddType이 명시된 줄 맨 아래에다 다음을 입력한다.
AddHandler php5-script php html

Wiki/Blog에서 YouTube embed tag를 넣으면 자동으로 삭제하는 현상이 있다. 해결방법은 다음과 같다.
$ cd /Library/Application\ Support/Apple/WikiServer/
$ sudo vi whitelist.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>protocols</key>
        <array>
                <string>irc</string>
                <string>scp</string>
        </array>
        <key>styles</key>
        <array>
                <string>font-size</string>
        </array>
        <key>tags</key>
        <dict>
                <key>object</key>
                <array>
                        <string>width</string>
                        <string>height</string>
                </array>
                <key>param</key>
                <array>
                        <string>name</string>
                        <string>value</string>
                </array>
                <key>embed</key>
                <array>
                        <string>src</string>
                        <string>type</string>
                        <string>width</string>
                        <string>height</string>
                </array>
        </dict>
</dict>
</plist>

내용을 확인한다.
$ file whitelist.plist 
whitelist.plist: XML  document text

$ sudo chown _teamsserver:_teamsserver whitelist.plist
$ sudo chmod 644 whitelist.plist
$ sudo apachectl -k restart


아이캘 서버
아이폰에서 아이캘 서버와 동기시, 아이폰에서 계정을 추가해야함.
아이캘 서버 유틸리티에서 Preferences의 Authentication을 Kerberos하면 에러남.
아이캘 서버의 초대기능은 아이폰에서 사용할 수 없음.


주소록 서버
주소록 서버의 경우, 서버의 주소록에서 On My Mac이 아닌, Preferences의 Accounts에서 계정을 별도로 생성한 뒤, 클라이언트의 주소록에서 해당 계정을 동기화해야함.
또한, 주소록 서버의 Push 기능은 아이폰 펌웨어 3.x 버전에서는 작동하지 않음. iOS4에서는 된다고 한다.


유저 관리
Workgroup Manager 실행시 ID는 diradmin, Password는 관리자로 등록된 유저의 비밀번호


하드디스크 공유
맥미니 서버버전의 경우, 하드디스크가 2개 장착되어있는데, 클라이언트에서 서버에 접속하면 두번째 하드는 접근할 방법이 없다. 따라서 임의의 마운트 포인트를 지정해줘야하는데, 세 가지 방법이 있다.
1. 심볼릭 링크를 걸어준다. 다만 이 경우 ssh 등에서는 문제가 없지만 smb, afp 등으로 접속하면 접근이 불가능하다.
2. disk utility를 열고 원하는 파티션을 클릭해 UUID 값을 복사한다. 그런 다음 원하는 디렉토리를 만들고 /etc/fstab을 열고, 다음과 같이 입력한다.
UUID=복사한 UUID값 /원하는 디렉토리 hfs rw 1 2
예제: UUID=9A1D30FE-964D-3483-89D2-F33DCD36FEFE /Users/Data hfs rw 1 2
이것의 문제점은 심볼릭 링크와 똑같다. 분명히 원하는 디렉토리에 볼륨이 마운트 되어있는데 클라이언트에서 보면 아예 보이질 않는다.
3. 가장 확실한 방법이다. Server admin을 실행시키고 AFP로 이동한다.
원하는 볼륨을 클릭하면 우측상단에 Share라는 작은 버튼이 있다. 그걸 클릭하면 하단에 세 가지 탭이 나오는데, Share Point를 누르고 Enable Automount에 체크, 그리고 Edit을 누른다. Custom mount path에 원하는 경로를 입력한다.
사실 터미널 열고 확인하면 그냥 똑같은 심볼릭 링크인데 이 경우는 afp, smb에서도 아주 잘 나온다.


RADIUS 
애플의 에어포트 베이스 스테이션 사용시, RADIUS 서비스 데몬을 키고 설정을 마치면 스노우 레퍼드 서버가 임의로 베이스 스테이션의 세팅과 비번을 바꿔버려서 공유기 사용이 불가능해진다. 이게 뭔지 확실히 아는 경우만 쓰자.


퀵타임 스트리밍 서버
퀵타임 서버 포트: 554, 퀵타임 관리자 메뉴 포트: 1220 (모두 웹으로 접속)
http://localhost:554/


메일서버
애플답지 않게 의외로 서버 어드민 패널에서 일부 설정이 불가능한 사항이 있다. 이는 터미널에서 수작업으로 해줘야하는데, 다행히 Squirrel Mail의 설정프로그램이 있다. 아래의 명령어를 터미널에서 실행한다.
sudo /usr/share/squirrelmail/configure
사용법은 Squirrel Mail 사이트의 매뉴얼을 참고한다.


Netboot
먼저 NFS를 활성화시켜야한다. 그런 뒤, Netboot 설정의 Settings - General 으로 가서, 이미지와  Userdata의 대상하드드라이브를 선택해준 뒤 저장을 한다. 그리하면 대상 하드드라이브의 루트폴더에  /Library/Netboot/NetBootSP0 이라는 폴더가 생성된다.
다음, dmg로 작성된 이미지나 혹은 DVD를 연결한 후(타겟모드 등) 서버유틸의 System Image Utility 실행, Netboot 이미지 만드는데에서 그대로 따라하면 되는데, 결정적으로 중요한 점은(이것 때문에 1시간 소비) 이미지가 생성되는 폴더의 이름은 NetBootSP0이 맞지만 위치를 잘 보면 엉뚱한 곳에 있다. 이것을 위의 세팅에서 잡아준 곳으로 변경한다.

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,
Mac OS X Snow Leopard 10.6에서 빌드 완료했습니다.
Mac OS X Lion 10.7에서 빌드 완료했습니다.

맥에서 실행되는 젠투설치 매뉴얼이다.
사실 맥에서는 젠투 Prefix를 설치할 필요가 그다지 절실하진 않은데 그 이유는,

1. 맥은 솔라리스와는 다르게 어플리케이션이 엄청나게 많다. 게다가 무료 어플리케이션이 리눅스만큼 있다. 못믿으시겠다고? 그래서 맥은 써봐야 안다는 거다.
2. 수많은 어플리케이션 말고도 FreeBSD의 Ports 시스템까지 있어서, 맥 쓰면 어플부족으로 곤란한 경우는 없다.
사실 어플의 숫자를 따지자면 리눅스랑 막상막하라고 볼 수 있는데다, 프로그램의 질이나 수준을 따지면 맥의 어플이 질적인 면에서 더 뛰어나다고 할 수 있겠다 (본인 생각이다). 게다가 양적으로도 밀리지 않고.

그럼에도 불구하고 맥에서 젠투 prefix를 설치한 건 어디까지나 개인적인 관심에 의해서다.
또 다른 이유가 하나 더 있다면, MacPorts는 Mac OS X에 이미 설치되어있는 툴들을 아주 당연히 무시해버린다. 무슨 말인고하니, 맥이 유닉스 기반이라는 건 다들 아시는 사실이니까 하는 말이지만 맥은 기본적으로 Perl, Python 등의 기본적인 툴들이 포함되어있고, Xcode를 설치하면 gcc등 각종 프로그래밍 언어의 컴파일러들까지 딸려온다. 그런데, MacPorts는 이렇게 설치되어있는 툴들을 무시해버리고 처음부터 끝까지 전부 다 설치해버린다. 즉 다시 말해서 BitTorrent라는 어플리케이션을 설치하기 위해서 Python, ncurses부터 빌드하기 시작해서 수많은 라이브러리/툴들을 모두 설치하고나서야 비로소 어플리케이션이 설치된다는 말이다. 그런데 이것들이 좀 가벼운 것들이 아닐테니 이미 시스템에 있는데도 불구하고 시간을 낭비해가면서 다시 설치해야한다는 거다.
뭐 사실, 다시 다 설치한다는 점을 비롯해서 이 글에서 설명하려는 Gentoo on Mac OS X이랑 별반 다를 건 없지만, 앞서 말했듯 개인적인 관심에 의한 것이고, MacPort가 애플의 지원을 받고있다고는 하지만, 개인적으로 젠투의 프로젝트가 더 끌리기 때문이다. 
하지만 MacPorts가 가진 어플리케이션의 양이 어마어마한 수준이기 때문에 젠투 Prefix에 없는 패키지들은 Ports를 통해야하고 결국 둘 다 공존해야한다는 결론이 내려진다. 

어쨌든... 젠투 Prefix가 뭔지 모르시는 분들을 위해 설명을 하자면, 젠투의 포티지 시스템을 로컬 시스템의 OS에 설치해서 쓰는 방식의, 젠투 프로젝트의 하나이다. 설명이 좀 어려운데, 다시 말씀드리자면, 맥 OS X을 건드리지 않고 젠투의 emerge 명령어를 통해 어플리케이션을 빌드할 수 있는 젠투의 포티지 시스템을 설치하는 것이다. 이것이 MacPorts와의 다른 점이 하나 있는데, MacPorts 자체는 이미 컴파일되어있는 바이너리를 가져와서 그냥 설치하기만 하면 되지만 (물론 어플들은 컴파일을 통해서 설치한다), 젠투는 처음부터 끝까지 모두 컴파일이라는 점, 그리고 Ports는 root 권한이 필요하지만(/opt 밑에 설치된다) 젠투는 개인폴더에 설치되서 운용이 가능하다는 점이다.

설치는 단 한 번의 에러도 없이 완벽히 됐고 그 방법을 매뉴얼화 한다.
먼저 젠투 Prefix 폴더를 만들고 패스를 지정해준다.
$ mkdir gentoo
$ export EPREFIX="$HOME/gentoo"
$ export PATH="$EPREFIX/usr/bin:$EPREFIX/bin:$EPREFIX/tmp/usr/bin:$EPREFIX/tmp/bin:$PATH"

이제 아래의 링크를 클릭해서 Prefix 스크립트를 받고 gentoo 폴더로 옮겨서 755 권한을 준다.
$ chmod 755 ~/Downloads/bootstrap-prefix.sh
$ mv ~/Downloads/bootstrap-prefix.sh ~/gentoo
$ cd ~/gentoo

이제 신발끈을 묶자.
$ ./bootstrap-prefix.sh $EPREFIX tree
$ ./bootstrap-prefix.sh $EPREFIX/tmp make
$ ./bootstrap-prefix.sh $EPREFIX/tmp wget
$ ./bootstrap-prefix.sh $EPREFIX/tmp sed
$ ./bootstrap-prefix.sh $EPREFIX/tmp python
$ ./bootstrap-prefix.sh $EPREFIX/tmp coreutils6
   (컴파일 실패하면 coreutils로 해본다)
$ ./bootstrap-prefix.sh $EPREFIX/tmp findutils
$ ./bootstrap-prefix.sh $EPREFIX/tmp tar15
$ ./bootstrap-prefix.sh $EPREFIX/tmp patch9
$ ./bootstrap-prefix.sh $EPREFIX/tmp grep
$ ./bootstrap-prefix.sh $EPREFIX/tmp gawk
$ ./bootstrap-prefix.sh $EPREFIX/tmp bash
$ ./bootstrap-prefix.sh $EPREFIX portage

rehash 해준다.
$ hash -r

이제부터 필수툴들을 빌드한다.
$ emerge --oneshot -q sed (개인적으로 emerge에서는 -q 옵션을 권장한다. -q는 컴파일 메시지를 보여주지 않는다.)
$ emerge --oneshot -q --nodeps bash
$ emerge --oneshot -q pax-utils
$ emerge --oneshot -q --nodeps xz-utils
$ emerge --oneshot -q --nodeps "<wget-1.13.4-r1" 
(에러날 시  
emerge --oneshot -q --nodeps wget)
$ emerge --oneshot -q --nodeps baselayout-prefix m4 flex bison binutils-config

gcc -v를 해서 gcc의 버전을 확인한다. 만약 4.0.1이면, 
$ emerge --oneshot -q --nodeps "=binutils-apple-3.2"

를 실행하고, 그 4.2.1 버전이면
$ emerge --oneshot -q --nodeps "=binutils-apple"

를 실행한다. Lion이면 후자일 확률이 매우 높다. 
 
$ emerge --oneshot -q --nodeps gcc-config gcc-apple (gcc 컴파일이라 시간이 좀 걸린다)

여기서부터는 방금 전 새롭게 컴파일한 gcc로 기본 툴들을 다시 컴파일하는 과정이다.
$ emerge --oneshot -q coreutils findutils tar grep patch gawk make
$ emerge --oneshot -q --nodeps file eselect

이제 부트스트랩된 포티지가 덮어씌여질 수 있도록 임시로 세팅을 바꿔서 포티지를 emerge한다.
$ env FEATURES="-collision-protect" emerge --oneshot -q portage

이제 임시파일을 지우고 rehash한다.
$ rm -Rf $EPREFIX/tmp/*
$ hash -r

포티지 트리를 업데이트 하자.
$ emerge -q --sync

Prefix 설치를 마무리할 수 있게끔 시스템을 빌드하자.
$ env USE=-git emerge -uq system

이제 대망의 마지막 작업이다. 여기서는 USE, CFLAGS를 지정해서 컴파일을 할 수 있다.
인텔 아이맥 코어2듀오 유저나 15인치 i5 맥북프로 유저라면 필자의 CFLAGS를 추천한다. 맥 좋은 게 뭔가. 동일한 플랫폼 아닌가. 아마 똑같이 작동할 거라고 믿는다. 필자의 CFLAGS는 젠투를 10번을 넘게 컴파일해가면서 얻어낸,  적어도 맥에서만큼은 안정적으로 작동하는 것들이다.
참고로, 아이맥 20", 24", 맥미니서버, 맥북프로 15" i5, i7에서 모두 빌드완료했다.

$ vi $EPREFIX/etc/make.conf

빈 파일이다. 내용을 입력해넣자.
CFLAGS="-mtune=core2 -march=core2 -mssse3 -msse3 -O3 -pipe -fomit-frame-pointer -funroll-loops"
CXXFLAGS="${CFLAGS}"
ACCEPT_KEYWORDS="amd64"
MAKE_OPTS="-j3"
LINGUAS="en ko"
USE="unicode nls"

위의 MAKE_OPTS에서는 자신이 쓰는 PC의 CPU 코어에 1을 더하면 된다.
Core i7이라면 코어가 4개일테니 5를 적어주면 되겠다.

혹시나 싶어 링크를 드린다. 안전한 CPU별 CFLAGS이다. http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel
이제 마지막 작업이다. 새로운 CFLAGS와 이것들을 빌드하기 위해서 그동안 만들어온 툴로서 다시 시스템 전체를 컴파일할 차례이다. 역시 -q 옵션 권장한다.
$ emerge -eq system

아무런 에러없이 빌드가 완료될 것이고, 코어2듀오 2.4GHz 기준으로 약 2시간이면 모두 끝난다.
(i5 이상의 경우 1시간 30분이내에 끝난다. 그나마도  gcc 컴파일에서 40분 잡아먹는다.)
아래의 내용을 실행해주자.
$ cd $EPREFIX/usr/portage/scripts
$ ./bootstrap-prefix.sh $EPREFIX startscript

이제 $HOME/gentoo 폴더에 보면 startprefix라는 실행파일이 하나 보일 거다. gentoo 폴더를 어디에 옮기든 이 startprefix만 실행해주면 언제든 emerge를 사용할 수 있다. 참고로 startprefix를 하고나면 /sbin, /usr/sbin의 패스가 걸려있지 않은데, startprefix 파일을 열어서 보면 root 유저인지 아닌지에 따라 패스를 거느냐 안거느냐 판단을 하는 부분이 있기 때문이다. 그런데 사실 root가 아니더라도 sbin 쓸 일은 수도없이 많기 때문에(ifconfig, ping, traceroute 등등) 이 부분에 대한 패스를 걸어준다.

$ vi $HOME/gentoo/etc/profile
if [ "$EUID" = "0" ] || [ "$USER" = "root" ] ; then 부분을 찾는다. 대략 24라인에 있다.
보시면 PATH= 라고 해서 잘 살펴보시면 /usr/sbin, /sbin 모두 패스가 걸려있다. 이 부분이 root에 대한 부분이고 그 아래 else 라고 적혀있고 PATH 라인이 있는데 여기 보시면 /sbin, /usr/sbin이 없다. 그래서 이 부분에 패스를 걸어주면 이제 일반 유저들도 startprefix 이후에 /sbin, /usr/sbin 바이너리를 이용할 수 있다.
패스추가는  이렇게 한다.

/sbin:/usr/sbin

디렉터리와 디렉터리 사이에는 콜론 : 으로 구분을 지어줘야한다. 필자의 설정을 예제로 들어본다.
/Users/jswlinux/Gentoo/usr/bin:/Users/jswlinux/Gentoo/bin:${PATH}:/usr/bin:/bin:/usr/sbin:/sbin"

이상이다. Enjoy your Prefix!
블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,
솔라리스를 리눅스처럼 쓰기위한 나의 노력은 참 눈물겹다고나 할까...
솔라리스라는 환상적인 OS와 오픈솔라리스의 불투명한 미래 때문에 시작된 나의 작은 관심은 블로그 포스팅을 거의 안하는 내가 불과 며칠 만에 여러 개의 글을 포스팅할 정도의 열정을 가질 정도였으니...

정식명칭은 Gentoo Prefix Bootstrap for Solaris.
솔라리스에서 작동되는 젠투다. 제목만 봐도 환상적이지 않은가.
뛰어난 솔라리스의 기능에 젠투의 emerge까지. 게다가 젠투가 가진 수만개의 패키지들... 컴파일을 통한 최적화된 설치. 솔라리스의 부족한 패키지를 보충하고도 남을 최고의 선택인 것이다.
하지만 안타깝게도 제대로 설치되지 않는다. 후에 설명한다.

먼저, 본인의 솔라리스 시스템은 OpenSolaris 2009.06 Intel 버전에 AMD 듀얼코어 CPU와 램3기가가 장착된 평범한 32비트 데스크탑 컴퓨터다.
젠투의 설치는 대략 3개의 파트로 나뉜다.
1. 신발끈 묶기 (Bootstrap)
2. 필수유틸 설치
3. emerge sync

먼저,  젠투를 설치하기 위해서는 gcc가 반드시 설치되어있어야한다. 설치되어있지 않다면 아래의 명령어로 gcc를 설치해주자.
$ pfexec pkg install SUNWgcc (3.4.3 버전이어야한다. pkg search SUNWgcc로 확인해보자)

젠투를 빌드할 폴더를 만들어준다. 개인 홈디렉토리에 만들어주면 된다.
$ mkdir gentoo

젠투를 빌드할 경로를 지정해준다.
$ export EPREFIX="$HOME/gentoo"

패스를 설정해줘야하는데, 이 부분에서는 젠투 홈페이지에 있는 것과 내용이 조금 달라서 아래의 경로를 사용하시길 바란다.
export PATH="$EPREFIX/usr/bin:$EPREFIX/bin:$EPREFIX/tmp/usr/bin:$EPREFIX/tmp/bin:/usr/sfw/bin:/usr/sfw/i386-pc-solaris2.11/bin:/usr/gnu/bin:/usr/bin:/bin:/sbin:/usr/sbin"

이제 아래의 경로를 클릭해서 젠투 Prefix 파일을 다운로드 한다.

다운로드를 다 했으면 방금만든 gentoo 폴더에 옮기고 755 퍼미션을 준다.
$ chmod 755 bootstrap-prefix.sh
$ mv bootstrap-prefix.sh gentoo/
$ cd gentoo

이제부터 1단계인 신발끈을 묶을 차례다. 아래의 명령어를 차례대로 입력하면 된다.
듀얼코어(코어2듀오보다 낮은)급 이상이면 별로 오래 걸리진 않는다.
$ ./bootstrap-prefix.sh $EPREFIX tree 
$ ./bootstrap-prefix.sh $EPREFIX/tmp make 
$ ./bootstrap-prefix.sh $EPREFIX/tmp wget 
./bootstrap-prefix.sh $EPREFIX/tmp sed 
$ ./bootstrap-prefix.sh $EPREFIX/tmp python 
$ ./bootstrap-prefix.sh $EPREFIX/tmp coreutils 
./bootstrap-prefix.sh $EPREFIX/tmp findutils3 
$ ./bootstrap-prefix.sh $EPREFIX/tmp tar 
$ ./bootstrap-prefix.sh $EPREFIX/tmp patch 
./bootstrap-prefix.sh $EPREFIX/tmp grep 
$ ./bootstrap-prefix.sh $EPREFIX/tmp gawk 
$ ./bootstrap-prefix.sh $EPREFIX/tmp bash 
./bootstrap-prefix.sh $EPREFIX portage

여기까지는 사실상 거의 문제가 없다. 이 중에서 단 하나라도 실패하면 뭔가 문제가 있는 거다.
이제 2단계로 넘어간다.
bash를 rehash 해준다.
$ hash -r

bash와 컴파일러, 그리고 bin유틸 등 필수유틸들을 빌드한다.
$ emerge --oneshot sed
(어떤 시스템에서는 여기서 에러가 났다. 하지만 emerge의 temp 파일에 가서 직접 make해주면 이상없이 잘 됐다)
$ emerge --oneshot --nodeps bash
$ emerge --oneshot wget
$ emerge --oneshot --nodeps baselayout-prefix
$ emerge --oneshot --nodeps xz-utils
$ emerge --oneshot --nodeps m4
$ emerge --oneshot --nodeps flex
$ emerge --oneshot --nodeps bison
$ emerge --oneshot --nodeps binutils-config
$ emerge --oneshot --nodeps binutils
$ emerge --oneshot --nodeps gcc-config
$ emerge --oneshot --nodeps "=gcc-4.2*"
(시간이 꽤 걸린다. 또한, 요즘 나오는 gcc는 대부분 4.4대라서 =gcc-4.4*로 놓고 컴파일을 해봤는데 에러가 났다. 4.3도 역시 에러가 났다. 일단 매뉴얼에서는 4.2로 설치를 한다)

이제는 새롭게 빌드한 gcc 4.2버전으로 필수유틸들을 빌드한다. 원래 솔라리스에 설치되는 gcc 버전은 3.4.x이다.
$ emerge --oneshot coreutils
$ emerge --oneshot findutils
$ emerge --oneshot tar
$ emerge --oneshot grep
$ emerge --oneshot patch
$ emerge --oneshot gawk
$ emerge --oneshot make
$ emerge --oneshot --nodeps file
$ emerge --oneshot --nodeps eselect
오픈인디아나의 경우는 여기서 에러가 아는데, 왜냐하면 저장소에 파일이 없다! 아래의 위치에서 eselect-로 시작하는 받아서 $EPREFIX/usr/portage/distfiles/에 넣어주자.
http://trumpetti.atm.tut.fi/gentoo/distfiles/
 
이쯤에서 스냅샷을 한 번 찍자.

$ emerge --oneshot pax-utils
문제는 바로 이 pax-utils이다. 여기서 젠투 Prefix를 때려치게됐다.
pax-utils에는 14개의 패키지의 의존성을 갖는다.
gnuconfig, autoconfig, zlib, bzip2, automake-wrapper, libperl, perl, perl-cleaner, help2man, texinfo, autoconf, automake, libtool, gnulib, pax-utils 등의 아주 중요한 툴들이 포함되어있어서 이것들이 빌드가 안되면 아무 것도 못한다는 얘기다.
오픈인디아나 148 버전에서는 정상적인 설치가 가능했다.
 

일단 앞에서 2번째까지인 gnuconfig, autoconfig는 빌드가 잘 된다. 하지만, 다음 패키지인 zlib에서 에러가 나는데, 에러메시지를 보면 scanelf라는 명령어가 없어서 빌드할 수 없다는 메시지가 나온다.
(/export/home/jswlinux/gentoo/var/tmp/portage/sys-libs/zlib-1.2.5-r2/temp/environment: line 4263: scanelf: command not found)
문제는 scanelf라는 명령어는 pax-utils에 포함된 명령어이다. 뭘 어쩌라는 말인지...
그래서 pax-utils 소스를 받아다 빌드를 해서 scanelf라는 명령어를 구했는데 일단 해당 메시지가 나오는 패키지는 컴파일이 됐다 (뭔지는 까먹었다). 이게 잘 되서 다음 패키지로 넘어갔고 두어개 정도가 이상없이 잘 빌드가 됐는데, perl에서 더 이상 진행이 안된다. 에러메시지는 
ld.so.1: as: fatal: libz.so.1: open failed: No such file or directory
라고 나오는 것이다. 분명히 저런 파일들은 라이브러리 디렉토리에 다 있었다. 그래서 혹시나 싶어 
export CC="/usr/sfw/bin/gcc" 라고 해주고 다시 빌드를 해봤지만 좀 되는가 싶더니 여전히 똑같은 에러메시지를 냈다. 이것 때문에 해외의 수많은 웹사이트를 뒤지고 다녔지만 자료가 별로 없었다. 국내는 전무한 상태이고, 솔라리스에 젠투 Prefix가 있는지 아는 사람조차 있을까 싶다.
더 이상 진행이 안되는 데에 시간을 계속 쓰고싶진 않았다. 일단 내 지식으로는 해결이 불가능한 부분이기도 하고...
혹시나 오픈솔라리스가 아닌 그냥 솔라리스10이면 되지 않을까 하는 생각도 들지만 나중에 시간이 나면 해볼 생각이다.
만약 pax-utils가 정상적으로 빌드되신 분들은 아래의 사항을 계속 진행하시면 된다.
다시 한 번 강조하지만,  오픈인디아나에서는 잘 된다. 

Portage를 emerge한다.
$ env FEATURES="-collision-protect" emerge --oneshot portage
오픈인디아나 148 버전의 경우는 여기서 에러가 나는 경우 아래처럼 한다.
mv $EPREFIX/usr/lib/libpython2.7.a 
$EPREFIX/usr/lib/_libpython2.7.a 
처음 부트스트랩 당시 빌드됐었던 파이썬의 바이너리 때문에 컴파일이 안된다는 얘기다. 


이제 임시폴더를 지우고 bash를 rehash한다.
$ rm -Rf $EPREFIX/tmp/*
$ hash -r

tree를 업데이트하자.
$ emerge --sync

system을 emerge한다.
$ emerge -u system
오픈인디아나 148의 경우 여기서 에러가 난다. gcc 4.5.2와 mpc 라이브러리간의 circular dependencies 충돌인데 
아직 해결 못했다.  해결했다. 파일을 하나 열고
$ vi $EPREFIX/etc/portage/package.mask
아래의 내용을 입력한다.
>=sys-devel/gcc-4.2.4-r01.3
그런다음 
$ env FEATURES="-collision-protect" emerge --oneshot findutils
끝나면 다시 USE=-git emerge -uav system 해보자. 리스트 뜬다. 뭐 사실은 해결이라기보단 그냥 gcc 4.5.2를 안쓰겠다고 막아놓은 거다.

또한 grep-2.9에서 에러가 날 경우, 위의 예처럼 grep 2.9 버전도 그냥 막아버리자.
큰 이상은 없을거다. 

참고로 USE 플래그나 CFLAGS 옵션을 따로 주는 방법인데 매뉴얼에 나와있길래 적어본다.
$ echo 'USE="unicode nls"' >> $EPREFIX/etc/make.conf 
$ echo 'CFLAGS="-O2 -pipe"' >> $EPREFIX/etc/make.conf 
$ echo 'CXXFLAGS="${CFLAGS}"' >> $EPREFIX/etc/make.conf

이제 대망의 마지막 작업이다.
$ emerge -e system

이것으로서 솔라리스에 원하는 젠투 패키지를 마음대로 가져다 설치할 수 있다. 남부럽지않은 패키지 시스템을 솔라리스에 갖추게 된 것이다.

Bootstrap된 Prefix 환경을 사용하기 위해서는 아래의 스크립트를 사용할 것을 권장한다.
$ cd $EPREFIX/usr/portage/scripts 
$ ./bootstrap-prefix.sh $EPREFIX startscript


블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,