ì „íŽ¸ì— ì´ì–´. FreeBSD를 사용하는 ì„œë²„ì˜ ê¶ê·¹ì ì¸ ëª©ì ì€ ë‚´ë¶€ DNS ë° ë‚´ë¶€ DHCP를 위한것ì´ì—ˆë‹¤.
- Master 와 Slaveê°€ 있어 ë‘개가 ê°™ì€ ì„¤ì •ìœ¼ë¡œ ìœ ì§€ë˜ì—ˆìœ¼ë©´ 했다.
- DNSì˜ ë‚´ìž¥ ê¸°ëŠ¥ì„ ì´ìš©í•´ë„ ë˜ê² 지만, MySQLì˜ master-slave replicationì„ ì´ìš©í•˜ì—¬ 한개 노드가 ì‹¤íŒ¨í• ê²½ìš° 바로 masterë¡œ ì‚¬ìš©í• ìˆ˜ 있게 í•˜ê³ ì‹¶ì—ˆë‹¤.
- DHCP는 그냥 pkgì—ì„œ 설치하면 ë˜ëŠ” ë¬¸ì œì—¬ì„œ í° ë‚œê´€ì´ ì—†ì—ˆë‹¤.
여기서 ë¬¸ì œê°€ 하나 ë°œìƒí•˜ê²Œ ë˜ëŠ”ë°, FreeBSD pkg repositoryì— ìžˆëŠ” powerdns 패키지ì—는 MySQL 백엔드가 ì•„ë‹Œ Postgres 백엔드만 í¬í•¨ë˜ì–´ 있다는 것ì´ì—ˆë‹¤.
ì¼ë°˜ì 으로 Postgres를 ì‚¬ìš©í• ì¤„ 아는 경우ë¼ë©´ í° ë¬¸ì œê°€ ë˜ì§€ 않는ë°, ê³µêµë¡ê²Œë„ 사내ì—ì„œ Postgres를 다뤄본 ê²½í—˜ì´ ìžˆëŠ” ì‚¬ëžŒì´ 1명 ë°–ì— ì—†ì–´ single point of failureì˜ ìœ„í—˜ì„±ì´ ìžˆì—ˆë‹¤. 그리하여, MySQL 백엔드를 í¬í•¨í•˜ì—¬ 새로 빌드하기로.
ì„¤ì¹˜ì— ì•žì„œ, ì˜ì¡´ì„±ì´ ìµœê·¼ì— ì¶”ê°€ëœê²Œ 하나 있어 해당 ì˜ì¡´ì„±ì„ 위해 pandocì´ë¼ëŠ” 문서 í”„ë¦¬í”„ë¡œì„¸ì„œì˜ ì„¤ì¹˜ê°€ 필요하다. (ì´ì „ì— íŒ¨í‚¤ì§€ 명ì¹ì´ pandoc ì´ì—ˆìœ¼ë‹ˆ ë§Œì•½ì— ì•„ëž˜ ëª…ë ¹ìœ¼ë¡œ 설치가 안ëœë‹¤ë©´ pandoc 으로 바꿔보면 ë ìˆ˜ë„ ìžˆë‹¤.)
pkg install hs-pandoc
ì»´íŒŒì¼ ë°©ë²•ì€ ê³µì‹ ë¬¸ì„œì— ìžˆëŠ” 그대로 ë”°ë¼í–ˆê³ , 추가한건 MySQL 백엔드를 활성화 시켜준 것 ë°–ì— ì—†ë‹¤. ëª…ë ¹ì€ ì•„ëž˜ì™€ 같다.
./configure --with-modules="bind gmysql"
ìš°ë¶„íˆ¬ì˜ build-essentialì— í•´ë‹¹í•˜ëŠ”ê²ƒì„ ì„¤ì¹˜í•˜ê³ (ì´ì™€ ê´€ë ¨í•´ì„œëŠ” ì´ì „ ê¸€ì— ì„¤ëª… ë˜ì–´ìžˆìœ¼ë‹ˆ ì°¸ê³ í•˜ë©´ ëœë‹¤.) 빌드를 진행하는ë°, ê´´ìƒí•œ ì»´íŒŒì¼ ì˜¤ë¥˜ë¥¼ 경험하게 ë˜ì—ˆë‹¤. (ë‚´ê°€ ê²ªì—ˆë˜ ì»´íŒŒì¼ ì—러는 í„°ë¯¸ë„ ìŠ¤í¬ë¡¤ë°±ì˜ ì‹ ë“¤ì—게 재물로 ë°”ì³ì¡Œê¸° ë•Œë¬¸ì— ë” ì´ìƒ 없다. êµ³ì´ í•´ë‹¹ refspecì„ ì°¾ì•„ê°€ì„œ 재현해보기는 귀찮으나, ê¶ê·¹ì 으로는 ê°™ì€ ì—러ì´ë‹¤.)
ì´ ì˜¤ë¥˜ì˜ ì›ì¸ì€ ëŒ€ë¶€ë¶„ì˜ ì²ì¤‘ì—게 ì˜ë¯¸ê°€ ì—†ì„ ë“¯ 하여, ì´ ê¸€ì—서는 설명하지 ì•Šê² ë‹¤. (명시ì 으로 ìƒì„±ëœ std::stringê³¼ 묵시ì 으로 ìƒì„±ëœ std::stringì˜ ìˆ˜ëª…ê³¼ reference tuple ì•ˆì— rvalue를 ë‹´ì„ ìˆ˜ 있는가 ì—†ëŠ”ê°€ì— ëŒ€í•´ í‘œì¤€ì˜ ê³¼ë„í•œ í•´ì„ì„ clangì—ì„œ í•˜ê³ ìžˆëŠ” ë¬¸ì œì¸ë°, ë” ì´ì•¼ê¸°ë¥¼ 하ìžë©´ 복잡하니 ìƒëžµ. ë‚´ìš©ì´ ê¶ê¸ˆí•˜ë©´ PRì„ ë³´ë©´ ëœë‹¤.)
불행 중 ë‹¤í–‰ì€ ë‚˜ ë§ê³ ì´ ë¬¸ì œë¥¼ ê²ªì€ ì‚¬ëžŒì´ ìžˆë‹¤ëŠ” 것ì´ì—ˆê³ , ì ì–´ë„ ìš°ë¦¬ í™˜ê²½ì— í•œì •ëœ ë¬¸ì œê°€ 아니었다는 것ì´ë‹¤.
추가 (45879fae66a5fbc37d1edf32b2b9337383140d2f 기준): FreeBSD 빌드가 ë˜ ë§ê°€ì ¸ë²„ë ¤ì„œ, PR#5067ì˜ íŒ¨ì¹˜ê°€ í•„ìš”í•˜ê³ , export CXXFLAGS=-std=c++11
ì„ ì¶”ê°€í•´ì£¼ì–´ì•¼ 한다.
ì˜¤í”ˆì†ŒìŠ¤ì˜ ë¬¸ì œì
여기서 ë¬¸ì œëŠ” ê¹ƒí—™ì— ë²„ê·¸ 리í¬íŠ¸ê°€ 들어간 ë‚ ì§œëŠ” 3ì›” 11ì´ì—ˆë‹¤ëŠ” 것ì´ê³ , ë‚´ê°€ ì´ ë¬¸ì œë¥¼ 겪ì€ê²ƒì€ 10ì›” 3ì¼ì´ì—ˆë‹¤ëŠ” 것ì´ë‹¤. 1줄 짜리 ì»´íŒŒì¼ ì—러 하나를 ìˆ˜ì •í•˜ëŠ”ë° 7달 ë™ì•ˆ ì•„ë¬´ë„ ì†ì„ 대지 않았다는 것ì´ë‹¤.
ì˜¤í”ˆì†ŒìŠ¤ì˜ ë¬¸ì œì ì€ ìƒì‚°ì„ 하는 ì‚¬ëžŒì´ ì†Œë¹„ë¥¼ 하는 사람보다 월등하게 ì 다는 것ì´ë‹¤. 특히나 ë‚œì´ë„ ë†’ì€ ê·¼ë³¸ ë¼ì´ë¸ŒëŸ¬ë¦¬ì¼ìˆ˜ë¡ (특히, C/C++ì¼ ê²½ìš° ì´ ë¬¸ì œê°€ 심ê°í•˜ë‹¤) ì‚¬ëžŒë“¤ì´ ê¸°ì—¬ë¥¼ ì•ˆí•˜ê³ ì“°ê¸°ë§Œ 한다는 것ì´ë‹¤. ë¬¸ì œëŠ” 기여를 하는 ì‚¬ëžŒë“¤ì´ ì ê³ , 요구사í•ì„ 외치는 ìœ ì €ë“¤ë§Œ 너무 많아 대ì‘ì´ ì•ˆë˜ëŠ” ì‹œì ì— ê¸°ì—¬ë¥¼ í•˜ë˜ ì‚¬ëžŒë“¤ë„ ê²°êµì—는 하나씩 ë²ˆì•„ì›ƒì„ í•˜ì—¬ ì˜¤í”ˆì†ŒìŠ¤ì— ê¸°ì—¬í•˜ëŠ” ê²ƒì„ í¬ê¸°í•œë‹¤ëŠ” 것ì´ë‹¤.
í•œ 줄짜리 패치 ë³´ë‚´ë©´ì„œ ìƒìƒ‰ 내는것 같지만, ì´ë ‡ê²Œë¼ë„ 하는 ì‚¬ëžŒì´ ë„ˆë¬´ 없는게 현실ì´ë‹¤. 다행히ë„, PowerDNS ì»¤ë¯¸í„°ë“¤ì´ ë‚´ 패치를 ë¹ ë¥´ê²Œ (하루 ê±¸ë ¸ë˜ê²ƒìœ¼ë¡œ 기억ëœë‹¤) PRì„ ë°˜ì˜í•´ì£¼ì—ˆê³ , BSD + clang 환경 호환성 ë¬¸ì œê°€ ì–´ë µì§€ 않게 í•´ê²°ë˜ì—ˆë‹¤.
오픈소스를 갖다 쓰지만 ë§ê³ , ë¬¸ì œê°€ 있으면 ë¬¸ì œê°€ ìžˆë‹¤ê³ ë³´ê³ ë§Œ 하ë˜ê°€ 그냥 쉽게 ë™ìž‘하는 다른 ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ íƒí•˜ëŠ” 경우가 많ì€ë° ë§Œì•½ì— í•´ê²°ì„ í• ìˆ˜ 있는 ë¬¸ì œë©´ í•´ê²°ì„ í•´ì„œ ê¸°ì—¬ë„ í–ˆìœ¼ë©´ 하는 바램ì´ë‹¤.
ì‚ì œëœ ë‚´ìš©
ì›ëž˜ 글ì—는 PowerDNS ì„¤ì • ê´€ë ¨ëœ ë‚´ìš©ë„ ìžˆì—ˆìœ¼ë‚˜, 회사 ë‚´ì—ì„œ PowerDNS를 사용하는 목ì ì´ ë‚´ë¶€ DNS ë° ë¹„í‘œì¤€ 내부 TLD를 ì§€ì› í•˜ê¸° 위한 목ì ì´ì–´ì„œ ì„¤ì • ê³µìœ ë¥¼ 하면 혼란만 ìžˆì„ ê²ƒ 같아 (해당 ì„¤ì •ì„ ê·¸ëŒ€ë¡œ ë³µì œí•˜ì˜€ì„ ê²½ìš° ì •ìƒì ì¸ DNS í™˜ê²½ì´ ì•„ë‹Œ 특수한 환경으로 ì„¤ì •ë˜ì–´ 버리기 때문ì—), ì²˜ìŒ ìž‘ì„±í•œ ë‚´ìš©ì—ì„œ ì‚ì œí•˜ì˜€ë‹¤.
ì¶”ê°€ëœ ë‚´ìš©
2017.2.22: Pandoc ì˜ì¡´ì„± ê´€ë ¨ ë‚´ìš© 추가.