pfexec pkgadd -d http://get.opencsw.org/now

cd /opt/csw/bin
./pkg-get -i clamav
pfexec ./freshclam
su -
vi ~/.profile
PATH에 /opt/csw/bin 추가

 

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

pfexec vi /etc/nsswitch.conf
host: files dns 확인
pfexec vi /etc/resolv.conf
nameserver 123.123.123.123
pfexec vi /etc/nwam/llp
lancard_name static 123.123.123.123
netstat -nr
pfexec route add default 123.123.123.1
pfexec route delete default old_gateway
netstat -nr
pfexec ifconfig lancard_name 12.123.123.123 up

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

USB 외장하드를 원하는 경로에 붙이는 경우
zpool create -m /원하는경로 pool이름 DEVICE_NAME
예) zpool create -m /Data exhdd c3t0d0

이후 zfs에서 스냅샷을 찍을려면 파일시스템을 생성해줘야한다.
zfs create exhdd
zfs set mountpoint=/Data exhdd

이하 새로운 폴더를 만들고 역시 스냅샷을 찍기 위한 파일시스템을 만들 경우
zfs create exhdd/Movie
zfs set mountpoint=/Data/Movie exhdd/Movie

뗏다붙였다 하고싶을 땐
분리: zpool export exhdd
연결: zpool import exhdd

참고: 분리시킨다고 zpool destroy 쳤다간 모든 자료가 싸그리 날아간다.

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

현재 사용 중인 하드: c1d0
추가 예정 중인 하드: c1d1
 
su - root

format
Searching for disks...
AVAILABLE DISK SELECTIONS:
0. c1d0 <ATA-SAMSUNGHM251JI-0_03 cyl 30398 alt 2 hd 255 sec 63>
/pci@0,0/pci104d,9045@1f,2/disk@0,0
1. c1d1 <WD-My Book 1140-1003-1.82TB>
/pci@0,0/pci104d,9045@1d,7/storage@2/disk@0,0
Specify disk (enter its number):

1번을 눌러 새로 추가한 하드 선택

format> fdisk
3번을 눌러 기존의 파티션을 삭제한 뒤, 1번을 눌러서 파티션을 생성해준다. 1번 Solaris를 고르고 사이즈에서 100을 누르면 100%가 된다. 그리고는 6번을 눌러 빠져나온다.
format> partition
partition> modify

1번 All Free Hog 선택, yes, 0, 엔터x6번, yes, 이름 알아서, y
partition> quit
format> verify
format> quit

zpool attach pool c1d0s0 c1d1s0
여기서 re-silvering이라는 걸 하는데 시간이 좀 걸린다. 얼마나 했는지 확인하는 방법은
zpool status rpool
8.05G resilvered, 91.59% done 이런 식으로 나옴
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1d1s0

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

오픈인디아나에서 기존 오픈솔라리스의 pfexec는 제대로 작동하지 않는다. 따라서, sudo를 쓰거나 혹은 pfexec를 쓰기위한 관리자를 추가해준다.

pfexec 사용하고 싶을 때: usermod -P "Primary Administrator" username

 

su - root 했는데

Password:

Roles can only be assumed by authorized users

su: Sorry 라고 나오면서 전환이 안될시

sudo -i 를 입력해서 root 권한을 획득한 뒤, vi /etc/user_attr 해서 본인의 계정이 적힌 곳을 확인한다. 아래와 같이 되어있을 것이다.
username::::type=normal;profiles=Primary Administrator
아래처럼 해준다. 
username::::type=normal;profiles=Primary Administrator;roles=root

 

사용자 추가명령어useradd -d /export/home/jswlinux -c "Brian Jung" -g staff -m -u 101 -s /bin/bash jswlinux

 

리눅스의 sudo와 비슷한 사용자 루트권한 주기

 

1. 권한 줄 사람의 역할을 /etc/security/exec_attr 에서 고른다.

예) Primary Administrator:suser:cmd:::*:uid=0;gid=0
여기서 Primary Administrator는 uid=0, gid=0 이므로 root나 마찬가지다.

User Management는 exec_attr 파일 안에 명시된 명령어에 한해서 root처럼 명령어를 수행한다.

 

역할부여 전
jswlinux@opensolaris:~$ useradd
UX: useradd: ERROR: Permission denied.

2. 권한을 줄 때는 반드시 루트에서 실행
usermod -P 'User Management' USERNAME
만약 해당유저가 로그인 중이라면 다시 로그인해야 적용

 

3. 역할확인
id -a
sudo id -a

4. 역할에 해당하는 명령어는, 명령어 앞에 pfexec/sudo를 붙임으로서 실행 가능.
예) sudo useradd

 

역할부여 후
jswlinux@opensolaris:~$ sudo useradd
UX: useradd: ERROR: invalid syntax.
usage:  useradd [-u uid [-o] | -g group | -G group[[,group]...] |-d dir | -b base_dir |
-s shell | -c comment | -m [-k skel_dir] | -f inactive |
-e expire | -A authorization [, authorization ...] |
-P profile [, profile ...] | -R role [, role ...] |
-K key=value | -p project [, project ...]] login
useradd -D [-g group | -b base_dir | -f inactive | -e expire
-A authorization [, authorization ...] |
-P profile [, profile ...] | -R role [, role ...] |
-K key=value ... -p project] | [-s shell] | [-k skel_dir]
jswlinux@opensolaris:~$ 


5. pfexec를 매번 붙이는 게 귀찮을 경우
pfexec bash

6. 해당사용자의 역할(직위) 해제
usermod -P '' USERNAME
이후
pfexec id -a

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

vmstat : 메모리 확인

 

psrinfo -v : CPU 상태확인

 

fmdump: 장애발생시 정보기록툴

 

svcadm disable gdm : X-Windows 끄고 텍스트모드로만 사용

 

shutdown -y -i5 -g0 : 셧다운, -y는 yes, -i5는 런레벨5(셧다운, 6은 리부팅), -g0 셧다운 시간(초)


touch response;pkgadd -d . -r ./response -a ./default YUKONXsolx : Marvell Yukon 랜카드 사용시 드라이버 설치법

 

sudo scanpci -v : PCI 장치 스캔

 

cat /etc/release : 릴리즈 정보

 

isainfo -kv : 커널 확인

 

/usr/sbin/prtconf | grep Mem : 메모리 용량확인

 

/usr/bin/prstat -Z : 현재 명령어별 메모리 사용량 확인

 

/etc/security/exec_attr : Roles 리스트

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

Zone 설정은 반드시 root권한을 갖고 해야한다. 따라서 아래의 두 명령어 중 하나를 고른다.

 

pfexec bash

혹은

su - root

 

zoneadm list -cv (ID값 0을 가진 global이라는 존은 솔라리스 설치시 생성되어있는 기본 존이다)

zone_web이라는 이름의 존 생성. 보안을 위해 퍼미션은 700. 위치는 어디든 상관없다. 여기서는 /export/zone_web으로 한다.

mkdir -m 700 /export/zone_web

 

ifconfig -a 해서 자신의 랜카드 이름을 메모해둔다. 잘 모른다면 lo0과 다른 이외의 것이 하나 나올텐데 그것이 분명하다.

 

zone_web 설정파일 생성

zonecfg -z zone_web

zonecfg:zone_web> create

zonecfg:zone_web> set zonepath=/export/zone_web

zonecfg:zone_web> set autoboot=true

zonecfg:zone_web> add net

 

IP는 반드시 같은 서브넷에 있어야한다. 예를 들어 본인의 솔라리스 머신의 IP가 192.168.0.2라면 Zone의 IP 주소는 192.168.0. 안에 있어야한다.

zonecfg:zone_web:net> set address=10.0.1.20/24

zonecfg:zone_web:net> set physical=yuconx0

zonecfg:zone_web:net> end

zonecfg:zone_web> verify

zonecfg:zone_web> commit

zonecfg:zone_web> exit

 

존이 생성됐는지 확인한다.

zoneadm list -cv

zonecfg -z zone_web info

 

존을 설치한다. 시스템 사양에 따라서 시간이 조금 걸리고, 패키지를 인터넷에서 받아오므로 시간이 좀 걸릴 수 있다.

zoneadm -z zone_web install

 

Ready 상태가 되어야 존을 부팅시킬 수 있다

zoneadm -z zone_web ready

 

Ready인지 확인한다.

zoneadm list -cv |grep zone_web

 

존을 부팅한다. ready가 아니고 installed 상태라면 자동으로 ready로 전환 후 boot 상태로 전환한다.

zoneadm -z zone_web boot

 

상태를 확인한다.

zoneadm list -cv

 

Zone이 아직 세팅이 되지 않았으니 세팅해준다. 터미널 고르는데서는 xterm을 고른다. 그외에는 맞는 것들을 적절히 넣으면 되겠다. 참고로 exit해도 안빠져나오니, 세팅이 다 끝나면 ~. 를 눌러서 빠져나오자.

zlogin -C zone_web

 

이제는 이렇게도 접속이 가능하다. 빠져나오는건 Ctrl+D 혹은 exit 하면 된다.

zlogin zone_web

 

nameserver를 설정해준다. Zone에서 빠져나와야한다.

pfexec cp /etc/resolv.conf /export/zone_web/root/etc/

zlogin zone_web

cp /etc/nsswitch.dns /etc/nsswitch.conf

 

존을 셧다운 시킬 때는 다음과 같이 한다. 서버 자체를 셧다운/리부팅 시켜면 오픈인디아나가 자동으로 halt 시켜준다.

zoneadm -z zone_web halt

 

만약 존을 언인스톨 하고싶으면 아래와 같이 한다.

zoneadm -z zone_web uninstall

zonecfg -z zone_web

zonecfg:zone_web> delete

zonecfg:zone_web> exit

zoneadm list -cv


Zone에서 mysql을 설치했는데 svcs에 등록이 안되어있을 때

svccfg import /var/svc/manifest/application/database/mysql_51.xml

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

오픈솔라리스 혹은 오픈인디아나 148

GNOME 데스크탑 메뉴에서
Package Manager -> Internet -> webstack-ui 설치 -> Applications -> Developer Tools -> Web Stack Initialize 클릭하거나, 혹은

초기화 명령어: /usr/share/webstack/libexec/initialize.sh 를 실행한다.
초기화는 한 번만 해주면 된다.
 

APM Start: /usr/share/webstack/libexec/start.sh

APM Stop: /usr/share/webstack/libexec/stop.sh

그놈메뉴 -> 프로그램 -> 개발자 도구 -> Webstack Admin -> Start Apache2/MySQL Servers

mysql -u root

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('비밀번호');

flush privileges;

exit



오픈인디아나 151a
오픈인디아나 151a부터는 오픈솔라리스의 저장소를 이용할 수 없다. 따라서 webstack-ui라는 패키지 자체가 없는데, 두 가지의 패키지만 설치하면 모두 해결이 가능하다.


pfexec pkg install amp SUNWcs

다음 SMF로 아파치를 시작해준다.

pfexec svcadm enable apache22

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

마침내 염원하던 "솔라리스에서 맥 타임머신 사용하기"가 이루어졌다.

본 노하우를 여기에 공개한다. 본인이 설치부터 작동까지 모두 직접 실행했으며, 현재도 사용하고 있다.

 

작업은 항상 root에서 해야한다. 따라서

$ pfexec bash

혹은

$ su - root

를 사용하여 루트 권한을 획득한다.

 

작업에 필요한 필수 패키지를 설치한다.

GCC를 설치한다. 오픈인디아나 위키에 보면 GCC 4.3을 요구하는데 그러지 않아도 된다.

pkg install gcc-dev

 

그외 컴파일하는데 필수적인 툴들을 설치한다.

pkg install SUNWgcc SUNWgmake SUNWxorg-headers SUNWGtk SUNWsfwhea

pkg install pkg:/developer/gnome/gettext

echo y | pkgadd -d http://mirror.opencsw.org/opencsw/pkgutil-i386.pkg all

echo auto | /opt/csw/bin/pkgutil -i CSWlibgcrypt-dev

 

이제 afp 동작에 절대적으로 있어야하는 버클리DB를 설치해야한다. 버클리 DB는 오라클 웹사이트에서 받을 수 있으며, 본인은 4.8.30 버전으로 했다.

wget http://download.oracle.com/berkeley-db/db-4.8.30.tar.gz .

 

netatalk를 다운받는다. 본인은 2.2.1 버전으로 했다.

wget http://sourceforge.net/projects/netatalk/files/netatalk/2.2.1/netatalk-2.2.1.tar.bz2/download

 

컴파일하는데 필요한 폴더를 만든다.

mkdir -p $HOME/src

mkdir -p $HOME/src/db-build

cd $HOME/src

 

버클리 DB의 압축을 해제한다.

gzcat $HOME/db-4.8.30.tar.gz | tar xf -

cd $HOME/src/db-build

 

런타임 링크의 환경을 지정해준다.

crle -u -l /usr/local/lib


버클리 DB의 빌드를 시작한다.

$HOME/src/db-4.8.30/dist/configure --prefix=/usr/local

make

make install

cd $HOME

 

빌드가 끝나면 afp 동작에 필요한 avahi 데몬과 mdns 데몬을 설치해준다. 오픈인디아나 151a의 경우는 기본으로 포함하고 있었다. 혹시 모르니 아래의 명령어를 실행해본다.

pkg install system/network/avahi

pkg install service/network/dns/mdns


이제 netatalk를 빌드한다.

cd $HOME/src

bzcat $HOME/netatalk-2.2.1.tar.bz2 | tar xf -

cd $HOME/src/netatalk-2.2.1

./configure --with-pam --prefix=/usr --sysconfdir=/etc

make

make install

 

빌드가 끝나면 반드시 afpd.service와 deviceinfo.service 파일을 생성해줘야한다.

아래의 내용을 붙여넣기 한다. 마우스 드래그가 안되면 아래의 주소를 이용하시면 되겠다.

주소: http://jswlinux.tistory.com/m/94


cat > /etc/avahi/services/afpd.service <<EOF

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->

<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>

<name replace-wildcards="yes">%h</name>

<service>

<type>_afpovertcp._tcp</type>

<port>548</port>

</service>

</service-group>

EOF


cat > /etc/avahi/services/deviceinfo.service <<EOF

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->

<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>

<name replace-wildcards="yes">%h</name>

<service>

<type>_device-info._tcp</type>

<port>548</port>

<txt-record>model=RackMac</txt-record>

</service>

</service-group>

EOF

 

SMF를 이용하여 서비스 데몬을 시작한다.

svcadm enable network/dns/multicast:default

svcadm enable system/avahi-bridge-dsd:default

 

adisk.service 파일을 작성해준다. 역시 아래의 내용을 붙여넣기 하면 된다.

cat > /etc/avahi/services/adisk.service <<EOF

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->

<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>

<name replace-wildcards="yes">%h</name>

<service>

<type>_adisk._tcp</type>

<port>9</port>

<txt-record>sys=waMA=0,adVF=0x100</txt-record>

</service>

</service-group>

EOF

 

서비스데몬을 재시작해준다.

svcadm restart multicast

svcadm restart avahi-bridge-dsd

 

맥OSX 라이언을 위한 설정을 넣어준다.

echo -e "\n- -noddp -transall -uamlist uams_dhx2.so -nosavepassword" >> /etc/netatalk/afpd.conf

 

타임머신 백업을 이용하기 위한 설정을 해준다. 잘 보시고 "원하는타임머신백업위치"에 원하는 위치를 넣으시면 된다.

예) /export/home/user/TimeMachine

 

echo -e "\nfor TimeMachine\n~ cnidscheme:dbd options:usedots,invisibledots,upriv fperm:0660 dperm:0770\n

/원하는타임머신백업위치/TimeMachine "TimeMachine" cnidscheme:dbd options:usedots,invisibledots,upriv,tm fperm:0660 dperm:0770" >> /etc/netatalk/AppleVolumes.default

 

여기까지만 하고나면 Finder 에서 오픈인디아나의 아이콘을 볼 수 있지만, 막상 연결을 하려면 지원되는 버전이 아니라고 나온다.

해외의 수많은 블로그/포럼을 검색했지만 제대로 된 답변을 찾을 수 없었다. 그래서 본인이 방법을 알아냈다. 특히 맥OSX 라이언에서도 정상 작동하며, 심지어는 타임머신 백업용으로도 사용이 가능하다.

 

smbpasswd 같은 명령어가 하나 있다. 이 명령어를 사용하여 유저를 추가해준다. 설정파일이 없으므로 빈 파일을 만들어준다.

touch /etc/netatalk/afppasswd

 

여기서 유저를 추가해주는데, 명령어를 실행하고 나면 비밀번호 설정을 요구한다. 하지만, 본 비밀번호는 afp 접속하고는 아무런 상관이 없다.

다시 말하면, afp://server를 하면 나오는 유저명과 비밀번호는 오픈인디아나 서버의 계정명과 비밀번호를 넣으면 된다는 얘기다. 나도 왜 그런지는 모르겠다. 아무튼 아래의 명령어에서 입력하는 비밀번호는 AFP 연결에 있어서 아무런 영향이 없다.

afppasswd -a USERNAME

 

netatalk를 재시작해준다. 아쉽게도 restart 옵션이 없다.

/etc/init.d/netatalk stop

/etc/init.d/netatalk start


이상이다. 모두 완벽하게 설치됐으며 완벽하게 작동하고 있다.

본 글을 보시고 잘 쓰시는 분이 계시면 리플 하나 남겨주시면 감사하겠습니다.

블로그 이미지

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의 잡동사니 보관소

,