성냥갑만한 웹서버

By Mark Nielsen
윤봉환 / el@linuxlab.co.kr

 

     

이 글의 원문은 http://wearables.stanford.edu/ 에서 볼 수 있다.

 

성냥갑 웹서버(Matchebox Webserver)는 1999년 1월부터 7월 13일까지 http://wearables.stanford.edu/ 웹사이트를 한 번도 다운되지 않고 운영해왔다. 성냥갑만한 보드 하나에 66 MHz AMD 486-SX CPU, 16 MB RAM, 그리고 HTTP 데몬을 포함한 레드햇 리눅스 5.2 버전이 들어가기에 충분한 16 MB 크기의 flash ROM을 장착하고 5V 파워 서플라이로부터 전원을 공급받는다.

성냥갑 웹서버는 시리얼 포트 두 개로 외부와 소통하고, 플로피 드라이브 커넥터도 가지고 있다. 이 모든 것들이 너비 5 평방 인치(2.8” x 1.8”), 두께 0.2” 공간만 차지하며 무게는 20그램이다. 마음만 먹는다면 여러분도 성냥갑 웹서버를 만들 수 있다.

성냥갑 PC는 성냥갑 웹서버보다(0.2”) 조금 더 두껍지만(0.95”), 너비는 그대로이다.(2.8” x 1.8”). 하지만 이 조그만 공간 속에 VGA, LCD, 10 Mb/s 이더넷, 그리고 340 MB 디스크 드라이브까지 PC의 모든 기능들이  다 들어있다.

이 용량이면 Windows 95/98이나 Linux를(웹 브라우저와 다양한 써드 파티 소프트웨어, 그리고 데이터베이스까지) 설치하기에 충분한 크기이다. 5V 파워 서플라이를 사용하며 쉬고 있을 때에는 2.5 W (.5 A), 바쁠 때에는 6 W (1.2 A)를 소비한다. 무게는 90그램이다.

성냥갑 웹서버 시스템을 만들어보고 싶다면 다음 단계들을 따라한다. 이 글은 여러분이 리눅스를 잘 알고 있다고 가정한다.

1. 먼저 Jumptec 대리점에 전화를 건다.(미국에 있다: 1-800-436-5872)
    그리고 Kathleen Conroy를 바꿔 달라고 말한다. Jumptec 486 DIMM-PC 모듈과
    VGA 보드가 있는 PC/104 개발 킷을 요청한다.(각각 ADA1, PC/10r-VGACRT-4라는
    이름을 가진 PC/104 보드 두 개다) 이런 것들을 구입하는데 약 $900 정도 들 것이다.
    (여러분이 이더넷까지 함께 사용하고 싶다면, 위에서 소개한 2 보드 대신 DIMM-PC/ADA2
    라 부르는 3소켓 보드를 요청하면 된다. 이 보드는 VGA, Ethernet, 시리얼 모듈이 통합되어
    있다)

2. 주문한 것들이 도착하면 모니터, 키보드, 플로피 드라이브를 보드에 꽂고, BIOS를 수정할
    수 있는지 확인한다. (핀 1은 네모난 쪽이고, 나머지 핀들은 둥근 패드쪽이다.
    그리고 각 케이블마다 붉은 선이 1번 핀이다) 먼저 플로피 디스크를 통해 여러분이 잘 쓰는
    도스 프로그램들을 몇 가지 실행해서 장치들이 잘 동작하는지 확인한다.

3. http://boole.stanford.edu/jumptec/vmlinuz 파일을 가져온 다음 dd나 rawrite를 써서
    디스켓에 복사해 넣는다. (여러분이 웹 브라우저를 통해 이 파일을 가져가기 힘들다면
    ncftp boole.stanford.edu 명령으로 익명(anonymous) 로긴해서 cd/pub/../jumptec 명령
    으로 간 다음, get vmlinux 명령으로 파일을 가져온다) 그리고, 그 디스켓으로 부트할 수
    있는지 점검한다. 아마 시작할 때 다음과 같은 장황한 메시지를 만나게 될 것이다:
 

Memory: sized by int13 088h
Console: Colour VGA+ 80x25, 1 virtual console (max 63)
Calibrating delay loop.. ok - 33.18 BogoMIPS
Memory: 14716k/16384k available (764k kernel code, 384k reserved, 520k data)

 

열 다섯 줄 정도 지난 다음 아래와 비슷한 메시지를 만날 것이다:
 

hda: SunDisk SDTB-128, 15MB w/1kB Cache, CHS=490/2/32

 

이 곳에서 “Partition check” 라는 메시지를 만난다면 파티션을 찾아서 루트 파일시스템으로 마운트하는 동안 문제가 생긴 것이다. 이 곳에서 이런 문제들은 자동으로 해결된다. 이제 시스템을 끈다.

4. rdev(root device) 명령으로 리눅스 루트파일시스템이 두 번째 파티션이라고 알려준다.
    위에서 만든 디스켓을 리눅스 박스에 넣고 다음 명령을 실행한다:

rdev /dev/fd0 /dev/hdb1

(이 명령은 루트 파일 시스템을 포함한 하드 드라이브 파티션을 디스켓에 있는 커널에게 알려준다. 이런 방법 대신 hdb1에 LILO를 설치해서 사용할 수도 있지만, DIMM-PC는 슬레이브 드라이브로 바로 부트할 수 없으므로 문제가 있다. 그래서, 오직 플로피 드라이브나 hda를 통해서만 부트할 수 있는데 우리는 아직 had 에 LILO 를 설치할 수 없다)

5. 루트가 /dev/hdb2에 마운트되도록 /etc/fstab 파일을 열어 다음과 같이 편집한다.
    (또는 위에서 redev 명령에 사용한 장치파일 이름을 지정한다-여러분이 다른 이름을
    지정했다면):
 

/dev/hdb2 / ext2 defaults 1 1

 

fstab이 다른 /dev/hda? 장치를 마운트한다면 hdb? 장치로 바꾸는게 좋겠다.

6. http://boole.stanford.edu/jumptec/devhda  파일을 /tmp 에 복사하거나 여러분의
    드라이브에서 적당한 아무 곳에나 복사해 넣는다. 이 파일은 Jumptec의 플래시 메모리
    에서 가져온 16MB 이미지이다. sum 명령으로 체크섬을 확인해보면 30038로 체크된다.

7. 여러분의 드라이브가 슬레이브가 되도록 시스템에 꽂은 다음 전원을 올린다.

8. 여러분의 시스템에 로그인한 다음, 아래 dd 명령으로 devhda 이미지를 /dev/hda 장치로
    전송한다.
 

dd if=devhda of=/dev/hda

 

9. 시스템을 멈추고, 전원을 내린 다음 하드 드라이브를 뽑는다. 전원을 다시 올리면 성냥갑
    여러분의 서버 클론이 동작할 것이다. 루트로 로긴한다 -- 루트 사용자의 패스워드는 비어
    있으므로, /etc/passwd 파일을 열어서, 여러분이 접근할 수 있는 다른 머신의
    /etc/passwd나 /etc/shadow에 설정된 값을 참고해서 직접 써 넣는다.

10. 여러분 자신의 커널을 컴파일하려면 (여러분의 하드 드라이브를 다시 꽂거나 다른 리눅스
     머신에서 작업해야 할 것이다) 먼저 drivers/char/keyboard.c 파일을 열어 46번 줄을 찾아
     (혹은 여러분이 2.2 커널을 사용한다면 drivers/char/pc_keyb.c 파일의 515번 줄
     ---Daniel Franke에게 감사) “__i386__”을 “notdef”으로 바꾼다. 이렇게 하면 Jumptec
     의 AMI BIOS가 할 일을 대신해서 키보드를 강제로 초기화할 것이다. (도움을 준 UCSB
     대학원의 Robert Prince에게 감사한다.)

여러분의 .config에 http://boole.stanford.edu/jumptec/dotconfig 파일을 사용하면 성능이 좀더 나아질 것이다.

11. 여러분의 리눅스 박스가 라우터처럼 PLIP 호환 서비스를 제공해서, evaluation 보드와
     리눅스 박스의 패러랠 포트 사이에서 표준 랩링크 케이블로(예를 들어 Fry 등) 연결하기
     위해 PLIP를 실행해야 한다. 양쪽에서 적절한 IP 주소를 선택하고 PLIP를 시작한다.

12. evaluation 보드를 제거하고 EMJ DIMM 소켓으로 바꾼다. 전원을 공급하고(5볼트) 소켓을
     접지한다. 아래는 DB25 커넥터의 핀 11개와 소켓의 핀 11개의 배선이다. 가게에서 사는
     대신 여러분이 직접 만들어 써도 좋다.
 

DIMM SOCKET DB25 (MALE)
GND = 90 <--> 25 = GND

PD0 = 100 <--> 15 = ERR
ERR = 102 <--> 2 = PD0
PD1 = 104 <--> 13 = SLCT

PD2 = 108 <--> 12 = PE

PD3 = 112 <--> 10 = ACK
PD4 = 114 <--> 11 = BUSY

ACK   = 122 <--> 5 = PD3
BUSY = 124 <--> 6 = PD4
PE     = 126 <--> 4 = PD2
SLCT = 128 <--> 3 = PD1

 




▲ top

home으로...