2010년 2월 21일 일요일

CentOS에 AFS Client 설치하기

AFS는 Andrew File System의 약자로 분산 파일 시스템의 일종이다. AFS는 Carnegie Mellon University에서 먼저 사용하였고 Transarc Corporation 의하여 개발 및 유지되고 있다. 아래에 Linux 환경에서 AFS를 설치하는 것을 예로 설명하련다. 이 예에서는 단지 AFS Client 설치만 한다.

AFS 배포 공식 사이트인 http://www.openafs.org 에 접속하여 자신이 설치한 시스템에 맞는 RPM 배포버젼을 다운로드 받는다. tar로 압축된 소스파일을 받아 자체로 빌드하여 설치 할 수도 있지만, 그 과정이 복잡하여 여기서 생략하고 RPM과 SRPM 배포버젼을 설치하는것만 설명할가 한다.

만약 설치한 시스템 커널을 바꾸지 않고 원래 설치된 그대로 사용하고 있다면 필요한 RPM 배포버젼을 받아 rpm -Uvh 명령어를 이용하여 설치하면 된다.
하지만 나의 경우는 필요에 따라 시스템 커널을 커스터마이징 하였다. 그로 인하여 afs 공식사이트에서 제공해주는 RPM파일을 직접 받아서 설치 할 수 없었다.

새롭게 커스터마이징한 커널에서 새로 SRPM파일을 받아 RPM들을 빌드 해낸다.

일단 OpenAFS사이트에서 SRPM을 받는다.

wget http://dl.openafs.org/dl/openafs/1.4.11/openafs-1.4.11-1.1.1.src.rpm

다음 SRPM을 설치한다. 단 주의할 것은 이때 우리가 설치하는건 SRPM이지 RPM이 아니다. 그러므로 설치되는건 RPM빌드를 하기 위한 Source 일 뿐인 것이다.

rpm -Uvh openafs-1.4.11-1.1.1.src.rpm

설치가 끝나면 /usr/src/redhat 디텍토리 밑으로 가보자.

cd /usr/src/redhat/SPECS

SPECS 폴더 밑에 openafs.spec 이라는 SPEC파일 생겼음을 알 수 있다.
이 SPEC 파일에 마춰 RPM들을 재빌드 해보자.

rpmbuild -ba openafs.spec

시간이 좀 걸리니 느긋하게 커피나 한잔 하면서 기둘리자.
빌드가 완성되면 /usr/src/redhat/RPMS/i386/ 폴더로 이동하여 새롭게 빌드된 RPM파일들을 확인 하자.
나의 경우에는 아래와 같은 파일들이 빌드 되었다.

dkms-openafs-1.4.11-1.1.1.i386.rpm
openafs-compat-1.4.11-1.1.1.i386.rpm
openafs-kpasswd-1.4.11-1.1.1.i386.rpm
openafs-1.4.11-1.1.1.i386.rpm
openafs-debuginfo-1.4.11-1.1.1.i386.rpm
openafs-krb5-1.4.11-1.1.1.i386.rpm
openafs-authlibs-1.4.11-1.1.1.i386.rpm
openafs-devel-1.4.11-1.1.1.i386.rpm
openafs-server-1.4.11-1.1.1.i386.rpm
openafs-authlibs-devel-1.4.11-1.1.1.i386.rpm
openafs-docs-1.4.11-1.1.1.i386.rpm
openafs-client-1.4.11-1.1.1.i386.rpm
openafs-kernel-source-1.4.11-1.1.1.i386.rpm

필요로 하는 RPM들을 골라 설치 한다. 나의 경우는 client만 필요하므로 openafs와 openafs-client 및 기타 몇몇 의존하고 있는 RPM들을 설치했다. 하지만 여기서 끝이 아니다. 커널이 필요로 하는 모듈도 새로 빌드 해야 한다. 모듈을 새로 빌드하기 위하여 커널 소스가 필요한데, 별도로 얻을 필요는 없고 openafs-kernel-source-1.4.11-1.1.1.i386.rpm 이 RPM파일을 설치하면 되겠다.

rpm -Uvh openafs-1.4.11-1.1.1.i386.rpm openafs-krb5-1.4.11-1.1.1.i386.rpm openafs-kpasswd-1.4.11-1.1.1.i386.rpm openafs-authlibs-1.4.11-1.1.1.i386.rpm openafs-kernel-source-1.4.11-1.1.1.i386.rpm openafs-client-1.4.11-1.1.1.i386.rpm openafs-compat-1.4.11-1.1.1.i386.rpm

다음 /usr/src/ 로 가보면 이미 openafs-kernel 폴더가 만들어져 있음을 발견 할 수 있는데 src폴더로 이동하여 ./configure 및 make를 날리여 커널 모듈들을 재컴파일 한다.

컴파일이 끝나면 /usr/src/openafs-kernel-1.4.11/src/src/libafs/MODLOAD-2.6.32.7-MP/ 경로에 우리가 필요로 하는 openafs 커널 모듈들이 만들어 진다. 이것을 /lib/modules/커널버젼/extra/openafs/ 폴더로 복사해준다. 폴더가 존재 하지 않으니 미리 만들어 주는 센스를 발휘해야겠다.

mkdir -p /lib/modules/커널버젼/extra/openafs
cp -R /usr/src/openafs-kernel-1.4.11/src/src/libafs/MODLOAD-커널버젼-MP/* /lib/modules/커널버젼/extra/openafs/

다음 떠있는 커널에 모듈을 인식 시키고 적재 시켜준다.
모듈을 적재하는 방법으로는 insmod와 modprobe 두가지가 있는데 modprobe는 의존성 체크까지 하여 모듈 적재를 하므로 비교적 안전하므로 이 방식으로 나는 추가 했다.

먼저 depmod 명령어를 날려 모듈 의존성 리스트를 만든다.

depmod -ae 커널버젼

다음 modprobe를 날려 openafs의존 모듈만 추가한다.

modprobe -a openafs

추가가 잘 되었는지는 아래 명령어를 확인해볼 수 있다.

lsmod | grep openafs

마지막으로 설치된 afs client를 실행해주면 끝~

service openafs-client start

2010년 2월 19일 금요일

CentOS에 Proftpd 설치하기

PROFTP 설치하기

proftpd 최신 소스 배포 파일을 받아 온다.
적절한 곳에 압축을 풀고 그 폴더 속으로 들어간다.

최신리눅스 부터는 passwd파일을 별도로 shadowing하여 저장하므로 FTP설치시 이것을 고려하여 적절한 옵션을 주어야 한다. 아니면 FTP 서버 설치후 유저 로그인시 인증이 안됨을 발견할 수 있다.

./configure --prefix=/usr/local/proftpd \
--enable-autoshadow \
--enable-shadow \
make && make install

기본적인 설정을 해주자.

 vi /usr/local/proftpd/etc/proftpd.conf

아래와 같은 부분을 찾아 바꿔준다.
User nobody
Group nogroup

 
User nobody
Group nobody
nogroup라는 그룹은 없기 때문에 안바꿔주면 대몬을 실행할 수 없다.
위 방법과 달리 nogroup이라는 그룹을 새로 생성해도 된다. 하지만 FTP에서만 사용하는 이런 좀비 그룹을 만들어도 크게 의미가 없으므로 첫자를 택했다.

conf 파일 안에는 DefaultRoot라는 항목의 주석을 제거하면 자신이 위치한 홈 디렉토리에서 벗어나지 못한다. FTP가 SFTP보다 좀 더 나아보이는 점이라고 볼 수 있겠다. SFTP는 자신의 홈디렉토리에서 벗어나는걸 막어 보려면 아주 삽질을 많이 해야 한다.

UseReverseDNS                off
IdentLookups                    off
이러면 기본 설치 및 설정이 끝난 상태이고, 보다 싶게 서비스를 start / stop 하기 위하여 별도 스크립트를 init.d에 등록해야겠다. 풀었던 소스 디렉토리 밑에 contrib/dist/rpm/proftpd.init.d 파일을 /etc/rc.d/init.d/ 밑으로 복사한다.
그리고 vi로 열고 PATH부분을 아래와 같이 수정해준다.

다음과 같이 PATH 수정

PATH="$PATH:/usr/local/proftpd/sbin"

chmod 755 /etc/rc.d/init.d/proftpd

퍼미션도 적절히 설정하는 것 잊지 말아야 한다.

/etc/rc.d/init.d/proftpd start
OK라고 나오면 설치 완료!

혹시 아주 엄격한 방화벽 룰을 설정하고 방화벽을 운영하고 있다면

vi /etc/sysconfig/iptables

iptables 파일을 열고 아래 내용 추가한다. 아래 iptable룰은 대체적으로 21포트로 들오오는 모든 tcp 새로운 상태의 request를 받아들이겠다는 것이다.

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

iptable을 재시동 한다.

/etc/rc.d/init.d/iptables restart
or
service iptables restart

서버 재시동후에 자동으로 시동되게 하고 싶으면 chkconfig에 등록을 해야겠다.

/sbin/chkconfig --add proftpd

방화벽설정을 위에서 처럼 했음에도 불구하여 자주 끊기거나 디렉토리 목록 못가져오면 passive 모드 관련 문제인데 이때 별도 passive port를 명시해준다.

PassivePorts 60000 62000

그리고 iptable에 다음과 같이 포트를 허용하도록 한다.

-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 60000:62000 --tcp-flags SYN,RST,ACK SYN -j ACCEPT