[N36L에 FreeBSD 9.x설치] 1. 기본설정.

2012. 3. 13. 16:25살아가는 이야기


집에서 사용하는 N36L 서버의 속도 향상 및 다용도 사용을 위해....


기존에 쓰던 Window 2008 을 버리고 FreeBSD로 OS변경을 하기로 마음먹었습니다.

일단  Storage,  iTunes Media Server, TimeMachine, FTP, 웹서버  이렇게 사용할예정입니다.

N36L 사양이야 뭐 많이 알려진 놈이라.. 일단 사양은 아래와 같습니다.

기술 사양
사양 개요
» PDF » HTML
프로세서
AMD Athlon II 모델 NEO N36L(2코어, 1.30GHz, 1MB L2, 15W)
프로세서 수 1
기본 메모리
1GB
프로세서 코어 지원
2
메모리 슬롯
DIMM 슬롯 2개
메모리
PC3 DDR3
확장 슬롯
절반 높이, 절반 길이 PCIe x16 Gen 2 1개 절반 높이, 절반 길이 PCIe x1 Gen 2 1개
네트워크 컨트롤러
1GbE NC107i 1 포트
표준 스토리지 연결
핫 플러그 미지원 8.89cm SATA
스토리지 컨트롤러
통합 4 포트 SATA RAID
전원 공급장치 유형
200W 내장형 전원 공급장치 1개
프로세서 캐시
2MB L2
광학 드라이브 유형
기본 구성 없음
보증서 (부품-공임-현장방문)
1/1/1

저는 여기에 램을 8기가로 업그레이드 하고 WD Green 3TB * 4박았습니다.
원래 달려있던 150GB하드는 OS용으로 ODD쪽으로 보냈습니다. ㅎ

램을 8기가나 박은 이유는 ZFS를 쓸려고 하는데 이게 생각보다 램을 많이 먹는것 같더군요.
그리고 램값이 싸서 --;  램업은 지금이 적기 ㅎㅎ

일단 작업전에 사전작업으로 핫스왑및 eSATA활성화 시켜줍니다.
아래 패치를 적용하면 기타 SATA속도 향상도 있습니다.

패치는 아래 링크 참조 하셔서 적용하시면 됩니다.

http://clien.career.co.kr/cs2/bbs/board.php?bo_table=lecture&wr_id=99910&sca=&sfl=wr_subject&stx=n36l 

http://www.dmmart.kr/bbs/board.php?bo_table=b_02&wr_id=2 

핫스왑이 지원되면 무지 편하나 패치관련해서는 책임질수 없습니다.
알아서 하시기를..

뭐 FreeBSD설치 관련이야 워낙 인터넷에 많은 지라 생략합니다.
저는 9.x로 설치 하였습니다.

이런 OS류 (Linux/ FreeBSD등 ) 를 설치하려면 일단 기본적인 명령어 정도는 알고 있어야 됩니다.

아무 생각없이 따라하실꺼면 그냥 Window나 FreeNAS를 쓰심이 --;

나중에 문제 생기면 진짜 손도 못댑니다.

일단 프로그램설치에 대한 간단한 시스템 설명및 방법을 설명드리자면..

FreeBSD에서는 port collection을 이용합니다.

FreeBSD Ports

"FreeBSD 포트 콜렉션은 최소의 노력으로 수많은 종류의 어플리케이션을 컴파일하고 설치할 수 있도록 합니다." 라고 사이트에 나와 있네요.
간단하게 이야기하면 설치 가능한 프로그램 목록이 있고 거기서 간단한 명령어만 실행해주면 설치가 됩니다.
물론 골치아픈 의존성 문제도 모두 해결해줍니다.

해당 포트로 cd명령으로 이동한다음 make install clean 이면 자기가 알아서 소스받고 바로 설치가 되는 놀라운 시스템입니다.


프로그램설치 방법은 크게 2가지 인데..

1. port로 설치  - 소스를 받아와서 환경설정후 컴파일을 해서 설치.
-> 시간이 오래걸리나 개별 컴파일 옵션 설정이 가능.

2. pkg_add로 설치 - 이미 컴파일된 바이너리를 받아와서 설치.
-> 시간은 얼마 안걸리나 옵션설정이 불가능.


저는 포트설치를 선호하는 편입니다.

일단 포트 설치시에는 몇가지만 아시면 됩니다. 

1. http://www.freebsd.org/ports/ 에서 해당 프로그램이 포트에 있는 지 검색.
2. 해당 폴더로 이동해서 make config 로 환경설정 또는 cat Makefile  으로 옵션확인 
3. make install clean  으로 설치.

여기서 cat Makefile 로 옵션을 어떻게 확인하느냐 하면.... 

Makefile 내용중 

.if defined(WITH_DEBUG)


이런식으로 옵션이 붙어 있는 것들이 있습니다.
이런것들이 옵션인데 설치 하실때..

# make WITH_DEBUG=yes install clean


의 형식으로 하시면 됩니다. 옵션이 여러개 이면

# make WITH_DEBUG=yes WITH_OPTION_B=yes install clean


이런식으로 하면 됩니다.  WITH...  의 위치는 뒤로 오나 앞으로 오나 크게 상관은없습니다.

 # make install clean  WITH_DEBUG=yes WITH_OPTION_B=yes 


요즘은 거의 make config를 지원해주니 고급사용자가 아니면 신경을 안 쓰셔도 됩니다.

참 쉽죠~ 

일단 OS설치가 끝났으면 순서대로 환경설정을 해보도록 하겠습니다.


CVSup 설치

이 넘이 뭐하는 거냐 하면 FreeBSD의 port / 소스등을 업데이트 해줍니다.

FreeBSD를 설치하면 필수로 까는 놈입니다.

cvsup은 
GUI 포함 여부의 차이로 두개의 port가 존재 합니다. 

/usr/ports/net/cvsup
 
/usr/ports/net/cvsup-without-gui/


X는 필요가 없으니 /usr/ports/net/cvsup-without-gui 을 설치하면 됩니다.

컴파일 하면 상당히 귀찮으니 걍 pkg_add로 쓱삭 (pkg_add 는 만들어진 바이너리를 가져와서 설치해줍니다.)

컴파일 돌리면 N36L CPU가 구려서 약 4시간 정도 소요됩니다.  --;

위치는  
/usr/ports/net/cvsup  에 있습니다.

# pkg_add -r cvsup-without-gui



환경설정을 위해 sample 파일을 가져와서 환경설정 파일을 만듭니다.


# mkdir /root/cvsup

# cp /usr/share/examples/cvsup/ports-supfile /root/cvsup/
# cp /usr/share/examples/cvsup/standard-supfile /root/cvsup/
# chmod +w /root/cvsup/*

위에서 복사한 파일을 열어 필요한 부분을 수정합니다. 

일반적으로 서버주소만 수정하고 사용하시면 됩니다. 

 

서버가 많지만 일반적으로 메인서버인 cvsup.freebsd.org 서버가 가장 빠릅니다.

port 를 위한 설정 수정.
 

# vi /root/cvsup/ports-supfile 
 

  *default host=cvsup.FreeBSD.org


SRC 도 수정.

 # vi /root/cvsup/standard-supfile
 

  *default host=cvsup.FreeBSD.org


우선적으로 port만 update하고 src는 나중에 하는것이 좋습니다.  

이거 한번 할때 시간이 좀 걸립니다. 


# cvsup -g -L 2 /root/cvsup/standard-supfile 
 

# cvsup -g -L 2 /root/cvsup/ports-supfile  


위의 과정이 귀찮으면 아래와 같이 해도 된다. 

-h 옵션으로 Server 지정.

# cvsup -g -L 2 -h cvsup.freebsd.org /usr/share/examples/cvsup/ports-supfile




portupgrade 설치.

이넘은 뭐하는 거냐 하면 프로그램 자동업그레이드(?) 라고 생각하시면 됩니다.

/usr/ports/ports-mgmt/portupgrade 에 있습니다.

나중에 설치하기도 귀찮으므로 미리 설치합니다. 역시 pkg_add로 ㅎㅎ

# pkg_add -r portupgrade



HDD 설정 (ZFS사용)

일단 위에서 말씀 드렸듯이 3TB * 4(Data 용) + 150GB(System용) HDD가 박혀 있는 상태입니다.

150Gb 짜리는 ODD 들어 가는 자리에 설치 했습니다. OS설치는 뭐 USB DVD-Rom을 이용해서 설치 했습니다.

시스템 쪽은 그냥 UFS를 사용하고 Data 쪽은 ZFS를 사용할려고 합니다.

ZFS
ZFS 파일 시스템은 기존의 유닉스 파일시스템을 대체하기 위하여 2005년 SOLARIS10에서 처음 소개된 파일시스템으로, 파일시스템들 가운데 최초로 128bit파일 시스템을 적용하여 거의 무한대의 용량을 제공하며 파일시스템 자체에서 볼륨 매니저 기능을 포함하여 시스템 내에 있는 하드 디스크들을 구성하거나 스토리지 풀로 통합하여 사용하는 것이 특징이다.


뭐 위의 설명보다는 UFS가 생각보다 안 빠릅니다 --; 
 
그나마 UFS보다는 ZFS가 빨라서...  관리도 쉽고 ^^  

zfs사용을 위해 /etc/rc.conf 에 다음의 구문을 추가합니다.

# vi /etc/rc.conf

zfs_enable="YES"

일단 장치 인식여부를 확인 합니다.


# dmesg | grep ada
 
ada0 at ahcich0 bus 0 scbus0 target 0 lun 0
ada0: <WDC WD30EZRX-00MMMB0 80.00A80> ATA-8 SATA 3.x device
ada0: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 2861588MB (5860533168 512 byte sectors: 16H 63S/T 16383C)
ada0: Previously was known as ad4
ada1 at ahcich1 bus 0 scbus1 target 0 lun 0
ada1: <WDC WD30EZRX-00MMMB0 80.00A80> ATA-8 SATA 3.x device
ada1: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
ada1: Command Queueing enabled
ada1: 2861588MB (5860533168 512 byte sectors: 16H 63S/T 16383C)
ada1: Previously was known as ad6
ada2 at ahcich2 bus 0 scbus2 target 0 lun 0
ada2: <WDC WD30EZRX-00MMMB0 80.00A80> ATA-8 SATA 3.x device
ada2: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
ada2: Command Queueing enabled
ada2: 2861588MB (5860533168 512 byte sectors: 16H 63S/T 16383C)
ada2: Previously was known as ad8
ada3 at ahcich3 bus 0 scbus3 target 0 lun 0
ada3: <WDC WD30EZRX-00MMMB0 80.00A80> ATA-8 SATA 3.x device
ada3: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
ada3: Command Queueing enabled
ada3: 2861588MB (5860533168 512 byte sectors: 16H 63S/T 16383C)
ada3: Previously was known as ad10
ada4 at ahcich5 bus 0 scbus5 target 0 lun 0
ada4: <VB0160EAVEQ HPG0> ATA-8 SATA 2.x device
ada4: 300.000MB/s transfers (SATA 2.x, UDMA5, PIO 8192bytes)
ada4: Command Queueing enabled
ada4: 152627MB (312581808 512 byte sectors: 16H 63S/T 16383C)
ada4: Previously was known as ad14


WD Green 3TB 짜리 하드가 ada0~3 으로 150Gb하드가 ada4로 잡혀있습니다.

ODD자리에 꼽은 하드는 항상 맨뒤로 잡힙니다. 그래서 ODD 자리에 꼽은 하드를 시스템 하드로 이용시 하드 추가시마다 부팅시 에러메세지 + /etc/fstab을 수정해줘야 되는 귀찮음이 --; 

저는 3TB 하드 4개를 묶어서 하나로 쓸생각입니다.

1. 일단 하드를 깨끗하게 밀어 버립니다.

# dd if=/dev/zero of=/dev/ada0 count=4096
# dd if=/dev/zero of=/dev/ada1 count=4096 
# dd if=/dev/zero of=/dev/ada2 count=4096 
# dd if=/dev/zero of=/dev/ada3 count=4096 



2. gpart를 이용해 GUID Partition Table 를 잡아 줍니다.

GUID Partition Table 로 쓰는 이유는 3TB HDD라 MBR로 는 안 잡힙니다. --;

gpart 명령어에 대한 설명.
http://www.freebsd.org/cgi/man.cgi?query=gpart&apropos=0&sektion=0&manpath=FreeBSD+9.0-RELEASE&arch=default&format=html 

GUID Partition Table
http://ko.wikipedia.org/wiki/GUID_%ED%8C%8C%ED%8B%B0%EC%85%98_%ED%85%8C%EC%9D%B4%EB%B8%94

# gpart create -s GPT /dev/ ada0
# gpart create -s GPT /dev/ ada1
# gpart create -s GPT /dev/ada2 
# gpart create -s GPT /dev/ada3 

3. zpool을 생성합니다.




일단 zpool을 생성합니다.

zpool create Storage raidz ada0 ada1 ada2 ada3


저는 iSCSI 를 사용할것은 아니라 그냥 묶기만 했습니다.
(사실 raidz 옵션을 빼먹었는데..  데이터를 다 올린뒤에 알았습니다 --;)


zpool create Storage ada0 ada1 ada2 ada3


zpool삭제는 아래와 같이 하시면 됩니다.

zpool destroy  Storage


생성된 결과를 확인 합니다.

# zpool status
  pool: Storage
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        Storage     ONLINE       0     0     0
          ada0      ONLINE       0     0     0
          ada1      ONLINE       0     0     0
          ada2      ONLINE       0     0     0
          ada3      ONLINE       0     0     0

errors: No known data errors

# zpool list
NAME      SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
Storage  10.9T            0   10.9T     27%     1.00x  ONLINE  -


이쁘게 묶였군요. 이제 10TB짜리 대빵 큰 하드가 생겼습니다.
FreeBSD로 OS를 변경한 목적이 친구들과의 파일공유도 있는지라..



일단 현재 상태를 확인 합니다.

# zfs mount
Storage                  /Storage

# zfs list
NAME             USED  AVAIL  REFER  MOUNTPOINT
Storage         10T  10T    31K  /Storage

친구들에게 공유할 영역과 개인 영역 두개로 쪼갭니다.
제가 이렇게 한이유는 추후 ftp나 Web Share사용시 개인자료가 보이는게 싫은 관계로 작업한 내용입니다.

이렇게 해도 두개가 따로 용량이 잡히는 것이 아니고 같이 사용합니다.
그냥 영역만 나눠서 쓴다고 생각하시면 됩니다.

# zfs create Storage/MyData
# zfs create Storage/Public


mount상태를 확인해 보면 아래와 같이 됩니다.

# mount
/dev/ada4p2 on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
Storage on /Storage  (zfs, local, nfsv4acls)  
Storage/MyData on /Storage/MyData (zfs, local, nfsv4acls)
Storage/Public on Storage/Public  (zfs, local, nfsv4acls)


일단 여기서 Storage는 mount를 시키지 않고 Storage/MyData는 /MyData로 Storage/Public은 /Strage 로 마운드 시켜 보겠습니다.

일단 모두 unmount를 시킵니다.

# zfs unmount -a


각각의 Mount point를 정해 줍니다.

# zfs set mountpoint=legacy Storage
# zfs set mountpoint=/MyData Storage/MyData
# zfs set mountpoint=/Storage Storage/Public

설정 결과를 확인 합니다.


# zfs mount
Storage/MyData                  /MyData
Storage/Public                  /Storage
 
# zfs list
NAME               USED  AVAIL  REFER  MOUNTPOINT
Storage              2.94T  7.76T       31K  legacy
Storage/MyData  87.1G  7.76T    87.1G  /MyData
Storage/Public    2.86T  7.76T    2.86T  /Storage

# mount
/dev/ada4p2 on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
Storage/MyData on /MyData (zfs, local, nfsv4acls)
Storage/Public on /Storage (zfs, local, nfsv4acls)

# df -h
Filesystem           Size    Used   Avail Capacity  Mounted on
/dev/ada4p2        142G     4.3G    127G        3%    /
devfs                    1.0k     1.0k        0B     100%    /dev
Storage/MyData    7.9T     87G     7.8T        1%    /MyData
Storage/Public       10T     2.9T    7.8T       27%    /Storage 


원하는 대로 설정이 된것 같네요.

일단 리부팅을 시켜서 정상적으로 다시 올라오는지 확인해 봅니다. 


pure-ftpd 설치


예전에는 proftpd를 많이 사용했는데 요즘은 pure-ftpd가 대세인것 같습니다.

사용해본 결과 설정이 간단합니다. 
또 다양한 옵션을 지원합니다.  sftp, mysql 연동등등

저도 대세에 따라 pure-ftpd를 사용하기로 ㅎㅎ

설치는 간단합니다.
 

# cd /usr/ports/ftp/pure-ftpd 

# make install clean


WITH_LANG=korean 옵션으로 pure-ftpd 에서 접속 할때 한글로 접속 상황을 보여 줄수도 있습니다.

근데 한글이 깨져보이는 경우가 왕왕발생해서 비추합니다. 

 

# make install clean WITH_LANG=korean


환경설정 파일을 복사한 뒤에 쓰기권한 부여합니다.
 

# cp /usr/local/etc/pure-ftpd.conf.sample /usr/local/etc/pure-ftpd.conf
# chmod +w /usr/local/etc/pure-ftpd.conf



IPV4Only yes 
주석을 해제하여 IPv4에서 동작하도록 합니다.

이건 뭐 IP V6지원이 될려면 아직 한참 남은지라.. ㅎ 


# vi  /usr/local/etc/pure-ftpd.conf 

# Listen only to IPv4 addresses in standalone mode (ie. disable IPv6)

# By default, both IPv4 and IPv6 are enabled.


IPV4Only                 yes


# Listen only to IPv6 addresses in standalone mode (ie. disable IPv4)

# By default, both IPv4 and IPv6 are enabled.


부팅시 자동으로 시작시키기 위해 /etc/rc.conf 에 아래 구문을 추가해줍니다.

# vi /etc/rc.conf

 
pureftpd_enable="YES" 




Apache 설치
 
웹서버 사용을 위해 Apache를 설치 합니다.
 

# cd /usr/ports/www/apache22
 

# make WITH_MPM=worker install clean

또는  

# make install clean


* WITH_MPM=worker?

Prefork는 일반적으로 Single CPU 또는 Dual CPU에서 성능이 좋고 Worker는 일반적으로 멀티 CPU 시스템에서 성능이 좋다.

 

정상적으로 설치 되었는지 점검합니다.

# rehash
# apachectl start


정상적으로 구동이 되지 않을시 아래파일을 확인해 봅니다.

# cat /var/log/httpd-error.log


* 문제 해결 Tip

[warn] (2)No such file or directory: Failed to enable the ‘httpready’ Accept Filter

/boot/loader.conf 에 아래 구문 추가.

# vi /boot/loader.conf

# Wait for full HTTP request accept filter
accf_http_load="YES"


httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

ServerName 지정이 안되어 발생한 문제로 /usr/local/etc/apache22/httpd.conf 에 아래 부분 수정.

# vi /usr/local/etc/apache22/httpd.conf

ServerName 127.0.1.1


부팅시 자동으로 시작시키기 위해 /etc/rc.conf 에 아래 구문을 추가해준다.  

# vi /etc/rc.conf
 

apache22_enable="YES"




Mysql Server 설치

기본적으로 DB사용을 위해 mysql을 설치 합니다.

문자셋을 utf-8로 설치하기 위해 아래와 같이 옵션을 주고 설치 합니다.
 

# cd /usr/ports/databases/mysql55-server 

# make WITH_CHARSET=utf8 WITH_COLLATION=utf8_general_ci install clean


mysql 설정 파일을 복사해줍니다. 

# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf 


부팅시 자동으로 시작시키기 위해 /etc/rc.conf 에 아래 구문을 추가해줍니다.

# vi /etc/rc.conf

 
mysql_enable="YES"


관리자 비밀번호를 지정해 줍니다.
안해주면 보안에 구멍이 딱!!  


#/usr/local/bin/mysqladmin -u root password [패스워드]


캐릭터셋을 점검합니다.
위에서 설치히 UTF-8로 했는데 잘되어 있는지를 확인해 봅니다. 


# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.20-log Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use test; show variables like 'c%'; 
Database changed 
+--------------------------+----------------------------------+ 
| Variable_name | Value | 
+--------------------------+----------------------------------+ 
| character_set_client | utf8 | 
| character_set_connection | utf8 | 
| character_set_database | utf8 | 
| character_set_results | utf8 | 
| character_set_server | utf8 | 
| character_set_system | utf8 | 
| character_sets_dir | /usr/local/share/mysql/charsets/ | 
| collation_connection | utf8_general_ci | 
| collation_database | utf8_general_ci | 
| collation_server | utf8_general_ci | 
| concurrent_insert | ON | 
| connect_timeout | 5 | 
+--------------------------+----------------------------------+ 
12 rows in set (0.00 sec) 

mysql> 


만약 정상적으로 캐릭터셋이 올라오지 않을경우 아래와 같이 수정 / 추가해주면 됩니다.

# vi /etc/my.cnf

[client]
default-character-set = utf8

[mysqld]
init_connect='set names utf8'
character-set-server=utf8
skip-character-set-client-handshake
character-set-filesystem=utf8

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8

 
 
PHP5 설치

php를 설치해야 제로보드 같은것을 사용가능하기 때문에 php를 설치 합니다.

일단 먼저 php 환경설정을 해줍니다. (아파치 모듈이 아닙니다.)
php가 웹에서만 쓰는 언어는 아니기에 기본적으로 php5 포트에 의존성이 있습니다.

# cd /usr/ports/lang/php5  
# make config 


* apache에는 반드시 체크하고 나머지는 알아서 하시면 됩니다.


# cd /usr/ports/lang/php5-extensions 
# make config install clean


* SPL은 반드시 체크! 다른 추가 모듈은 알아서 체크할것 

환경파일을 복사 합니다.

# cd /usr/local/etc
# cp php.ini-recommended php.ini 

php.ini 를 수정합니다.


vi /usr/local/etc/php.ini
 

short_open_tag = On
register_globals = On (제로보드사용시)


* short_open_tag=On ?

<?  ?> 을 사용가능하게 해줌


apache에서 php를 사용하기 위해 type지정을 해준다.
http.conf를 수정하면 됩니다. 


# vi /usr/local/etc/apache22/httpd.conf
 

AddType application/x-httpd-php .php .inc .html .htm
AddType application/x-httpd-php-source .phps


기본 파일를 변경합니다.
http://google.com/  과 같이 뒤에 정확한 파일명이 없이 주소로 접근할때 자동으로 읽어 들이는 파일 리스트입니다.


# vi /usr/local/etc/apache22/httpd.conf 

DirectoryIndex index.html index.php


아래와 같은 내용의 페이지를 만들어 정상적으로 php가 동작하는지 확인합니다.

# touch /usr/local/www/apache22/data/phpinfo.php

# vi /usr/local/www/apache22/data/phpinfo.php 

<?php
phpinfo();
?> 

* FreeBSD에서  apache22의 기본 root는 /usr/local/www/apache22/data/ 입니다.
 
정상적으로 php관련 정보가 뜬다면 위에서 생성한 파일은 바로 삭제 합니다.
보안문제가 발생할 소지가 있습니다.

# rm /usr/local/www/apache22/data/phpinfo.php

 

반응형