회사ì—ì„œ ì´ì „까지 내부 테스트 서버 ë“±ì„ ì ‘ì†í•˜ê¸° 위해서 mDNS (Bonjour)를 ì´ìš©í•˜ë‹¤ê°€, ì•ˆì •ì„± ë¬¸ì œë‚˜ broadcast ë…¸ì´ì¦ˆ ë“±ì´ ë„ˆë¬´ ë§Žê³ , ì„œë¸Œë„·ì„ ë¶„ë¦¬í• ìƒê°ì— 내부 DNS를 구축하기로 하였다. 새로 아주 ì €ì‚¬ì–‘ 서버를 2대 구입하여, DNS를 ê±°ê¸°ì— ë„£ê¸°ë¡œ 하였는ë°, 간혈ì 으로 재부팅시 ë¶€íŒ…ì´ ì™„ë£Œë˜ì§€ 않는 ì–´ì´ì—†ëŠ” systemd 버그를 겪게 ë˜ì–´ 초기 세팅 후 장기ì ì¸ ì•ˆì •ì„± ë¬¸ì œì— ëŒ€í•´ì„œ ê±±ì •ì´ ë“¤ê¸° 시작하였다.
해당 버그는 ìˆ˜ì •ì´ ëœ ìƒíƒœì´ë‚˜, ë¶€íŒ…ì„ ë‹´ë‹¹í•˜ëŠ” ëª¨ë“ˆì´ ë¶€íŒ…ì„ ì™„ë£Œí•˜ì§€ 못하는 버그가 있는 ìƒíƒœì—ì„œ 릴리즈가 ë˜ì—ˆë‹¤ëŠ” 것 ìžì²´ì— 대해서 ì‹ ë¢°ë„ì˜ ë¬¸ì œê°€ 있어, ì¼ë‹¨ì€ ë‹¹ë¶„ê°„ì€ ì‚¬ë‚´ì— systemd를 사용하는 ë°°í¬íŒì˜ ë„ìž…ì€ ë¯¸ë£¨ëŠ” 것으로 í•˜ê³ , ê·¸ 사ì´ì— ëŒ€ì±…ì„ ì¡°ê¸ˆ ê³ ë¯¼í•˜ë‹¤ systemd와 ì—°ì´ ìžˆì„래야 ìžˆì„ ìˆ˜ 없는 BSD를 사용하기로 하였다. (아울러 ê°œì¸ì 으로 Lennart Poetteringì˜ ì² í•™ê³¼ ë™ì˜í•˜ì§€ 않는다. ì´ê±´ 어디까지나 사족ì´ì§€ë§Œ...)
여러가지를 ê²€í† í•˜ë‹¤ (DragonflyBSD를 특히 ìœ ì‹¬ížˆ 보았다) ê²°êµì€ 해본ì ì´ ìžˆëŠ” FreeBSDë¡œ ê²°ì •ì„ í•˜ì˜€ëŠ”ë°, ì˜¤ëž«ë§Œì— í•´ë³´ë‹ˆ (마지막으로 ì–‘ì‚°ì—ì„œ ì¼ë˜ê²Œ 4.x대였ë˜ê±¸ë¡œ 기억ëœë‹¤.) ì €ìª½ í™˜ê²½ì— ë„ˆë¬´ ìµìˆ™í•´ì ¸ë²„ë ¤ 불편한 ì ì´ í•œë‘가지가 아니었다. 그래서 조금 í™˜ê²½ì„ ë¹„ìŠ·í•˜ê²Œ 맞추는 ê³¼ì •ì˜ ê¸°ë¡ì„ 남기기로.
FreeBSD는 apt-getì´ë‚˜ yumì´ ì—†ê³ , ìžì²´ 패키지 ë§¤ë‹ˆì ¸ë¥¼ 사용한다. ports와 pkg ë‘ ê°€ì§€ 중ì—ì„œ ì„ íƒì„ í• ìˆ˜ 있는ë°, ì „ìžëŠ” 소스 빌드ë¼ê³ ìƒê°í•˜ë©´ ë˜ê³ 후ìžëŠ” 빌드 ëœ ë°”ì´ë„ˆë¦¬ë¥¼ 사용한다. ë°°í¬ ëŒ€ìƒ í•˜ë“œì›¨ì–´ê°€ í”í•´ë¹ ì§„ ì¸í…”ì´ì–´ì„œ, 아래 예시ì—는 시간 ì ˆì•½ì„ ìœ„í•´ 후ìžë¥¼ 사용하였다. ì´ì „ì— ì–‘ì‚°ë•Œì—는 서버가 DEC Alpha여서 í¬íŠ¸ë¡œ 다 빌드를 í–ˆë˜ (좋지 ì•Šì€) ê¸°ì–µì´ ìžˆë‹¤.
설치 ìžì²´ëŠ” ì¸ìŠ¤í†¨ëŸ¬ë¥¼ ì‚¬ìš©í• ê²½ìš° í¬ê²Œ ì–´ë ¤ì›€ì´ ì—†ìœ¼ë‹ˆ ì„¤ëª…ì„ ìƒëžµí•˜ê³ , í™˜ê²½ì„ ì¡°ê¸ˆì´ë‚˜ë§ˆ 근대ì ì¸ í™˜ê²½ìœ¼ë¡œ ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ í•˜ëŠ” ë°©ë²•ì„ ê³µìœ í•˜ë©´ ë„ì›€ì´ ë ì‚¬ëžŒì´ ìžˆì„까 싶어 문서화. (ì´ ì„œë²„ë“¤ì˜ ê²½ìš°ì—는 ZFS ì „ì²´ ë””ìŠ¤í¬ ì‚¬ìš©ìœ¼ë¡œ ìžë™ ì„¤ì •, 나머지는 ê±°ì˜ ê¸°ë³¸ ì„¤ì •, 단 games 메타 패키지는 ëºë‹¤.)
í•œ 가지 주ì˜í• ì ì´ ìžˆë‹¤ë©´, 서버 목ì ì´ë¼ë©´ 설치 ê³¼ì • 중 ì‚¬ìš©ìž ê³„ì • 추가시 관리ìžëŠ” wheel ê·¸ë£¹ì— ë„£ì–´ì£¼ëŠ”ê²Œ 좋다는 것 ì •ë„ê°€ ë˜ê² 다. OpenSSH 설치 기본 ì˜µì…˜ì— root 로그ì¸ì´ 금지ë˜ì–´ 있는ë°, wheel ê·¸ë£¹ì— ë„£ì–´ì¤˜ì•¼ suê°€ ëœë‹¤. (FreeBSD는 기본 ë°°í¬ì‹œ sudoê°€ 없다. 필요하면 설치해서 사용해야한다.) ì´ê±¸ 까먹으면 ì´í›„ì— ë¬¼ë¦¬ì 으로 ì„œë²„ì— ê°€ì„œ ìž‘ì—…ì„ í•œë²ˆ 해줘야하는 ë¬¸ì œê°€ ë°œìƒí•˜ë‹ˆ 주ì˜í•˜ë„ë¡ í•˜ìž.
ê°œì¸ì 으로 ì‚¬ìš©ì¤‘ì¸ ë…¸íŠ¸ë¶ ëª¨ë‹ˆí„°ê°€ ìž‘ì•„ì„œ, motdê°€ 보지 ì•Šì„ ë‚´ìš©ì´ ë„ˆë¬´ ë§Žì´ í‘œì‹œë˜ì–´ 빈 내용으로 ì‚ì œ.
mv /etc/motd /etc/motd.bak
touch /etc/motd
FreeBSDì—는 설치시 컴파ì¼ëŸ¬ê°€ (10.x 설치시 LLVM 3.7ì´ ê¹”ë ¤ìžˆë‹¤.) ë”°ë¼ì˜¤ë‚˜ build-essentialì— í•´ë‹¹ë˜ëŠ” 메타패키지가 없어 ì´ê±¸ 알아서 ì¡°ë¦½ì„ í•´ì•¼í•œë‹¤. 아래가 그것.
pkg install autoconf automake devel/pkgconf libtool bison gmake ragel devel/boost-all git
ì´ ì¤‘ì—ì„œ 매우 ì¤‘ìš”í•œê²ƒì´ gmakeì´ë‹¤. FreeBSD는 ìžì²´ì ì¸ make를 í¬í•¨í•˜ì—¬ ë°°í¬ë¥¼ 하는ë°, GNU Make와 í˜¸í™˜ì´ ë˜ì§€ 않기 ë•Œë¬¸ì— ìƒë‹¹ìˆ˜ 오픈 소스 프로ì 트가 빌드가 ë˜ì§€ 않는다. 마지막 2개는 ë‚˜ì˜ ê²½ìš°ì—는 필요했는ë°, 필요하지 ì•Šì„ ê²½ìš°ì—는 ìƒëžµí•˜ì—¬ë„ ëœë‹¤.
ìƒë‹¹ìˆ˜ 오픈소스 프로ì 트는 Makefileë‚´ì— ê²Œìœ¼ë¥´ê²Œ gcc/g++를 ì“°ë„ë¡ í•˜ë“œ 코딩 ë˜ì–´ìžˆë‹¤. 컴파ì¼ëŸ¬ê°€ ê¹”ë ¤ìžˆëŠ” ë§ˆë‹¹ì— êµ³ì´ GNU Compiler를 ì„¤ì¹˜í• ì˜ë¯¸ëŠ” 없는듯 하여, ì´ ë¶€ë¶„ì€ macOSì—ì„œ ì• í”Œì´ ì‚¬ìš©í•˜ëŠ” 꼼수를 사용하였다.
# ì´ëŸ° 짓 ìžì£¼ 하면 지옥 간다.
ln -s /usr/local/llvm37/bin/clang /usr/local/bin/gcc
ln -s /usr/local/llvm37/bin/clang++ /usr/local/bin/g++
사용하는 FreeBSD ë²„ì „ì— ë”°ë¼ /usr/local/llvm[0-9]+ ì—ì„œ ì‚¬ìš©í•˜ê³ ì‹¶ì€ ë²„ì „ì„ ì°¾ì•„ì„œ ì¨ì£¼ë©´ ëœë‹¤.
마지막으로, FreeBSD는 기본으로 쉘로 csh를, 기본 ì—디터로 BSD vi를 사용하는ë°, ìƒë‹¹ 수 프로ì íŠ¸ë“¤ì´ (아울러 사내 프로ì 트들) bashismì´ ì‹¬í•˜ê³ , BSD viì˜ ê¸°ëŠ¥ìƒ ì œì•½ì´ ë§Žì•„ ì „ì— bash ì„¤ì •ì˜ alias ë ˆë²¨ì—ì„œ 바꾸었다. 아울러 makeë„ gmakeë¡œ alias. bash 사용ìžì—만 해당ë˜ì§€ë§Œ, rootfs를 ì†ìƒì‹œí‚¤ì§€ ì•Šê³ ìµìˆ™í•œ í™˜ê²½ì„ ìœ ì§€í• ìˆ˜ê°€ 있는 편법ì´ë‹¤.
/etc/profile í•˜ë‹¨ì— ì•„ëž˜ ë‚´ìš© 추가
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
. /etc/bash.bashrc
fi
fi
/etc/bash.bashrc 작성
# Better prompt for both normal and sudo
PS1='[\u@\h \W]\$ '
SUDO_PS1='[\u@\h \W]\$ '
export TERM=xterm-color
export CLICOLOR=1
export LSCOLORS=ExFxCxDxBxegedabagacad
# BSD ls uses a different parameter for colorization
alias ls="ls -G"
alias l="ls -lG"
alias ll="ls -lGa"
alias vi="vim"
# BSD make isn't particularly useful, so replace that with gmake
alias make="gmake"
BSD lsì˜ ê²½ìš°ëŠ” ìƒ‰ìƒ í‘œì‹œë¥¼ 위한 ì˜µì…˜ì´ ë‹¤ë¥´ë‹¤. BSDì—ì„œ ì œê³µí•˜ëŠ” coreutilsì— í•´ë‹¹ë˜ëŠ” ëª…ë ¹ì˜ ê²½ìš° GNUì— ë¹„í•´ì„œ ê¸°ëŠ¥ì´ ì—†ê±°ë‚˜, 사용 ë°©ë²•ì´ ë‹¬ë¼ ë¶ˆíŽ¸í•¨ì´ ìžˆì„ ìˆ˜ 있다. GNUì—만 있는 ê¸°ëŠ¥ë“¤ì´ í•„ìš”í• ê²½ìš°, sysutils/coreutils를 설치하면 ëœë‹¤. (현재 ìž‘ì—…ì¤‘ì¸ ë°°í¬ í™˜ê²½ì—는 ë””ìŠ¤í¬ ìš©ëŸ‰ ì ˆì•½ì„ ìœ„í•´ coreutils설치를 하지 않았다.)
PowerDNS ì„¤ì¹˜ë²•ì€ ë‹¤ìŒ ê¸€ì—.