프로토콜을 개발하거나 검증하려고 할 때 SSL/TLS 암호화 채널로 전송되는 데이타를 디코딩하여 확인이 필요할 때가 있다. 이 글에서는 시험하려는 프로그램의 수정 없이 또는 최소한의 수정으로 디코딩 하는 방법을 설명한다.
개요TLS 채널의 초기 셋업 절차는 크게 보면 다음과 같은 절차로 이루어진다.
서버 인증서를 받아서 검증하기 필요하면 클라이언트 인증서를 받아서 검증하기 암호화 방식을 이용하여 대칭키 교환 대칭키를 이용한 암호화된 데이타 송수신 패킷을 분석하기에 필요한 사항은 결국은 위 세번째 과정에서 교환한 대칭키(Master Secret)를 얻는 것이다.
IPv6 서비스를 개발하거나 시험하려는 경우 국내에서 기업용 인터넷이 아닌 경우에는 IPv6 주소를 이용하기가 쉽지 않다. IPv4 주소만 제공하는 가정용 인터넷이나 LTE 망에서 Oracle Cloud Infrastruct(OCI) Free Tier 를 사용하여 무료로 공인 IPv6 망을 구성하는 방법을 설명한다.
시스템 구성 다른 방법들공인 IPv6 를 할당받는 가장 쉬운 방법은 IPv6 TunnelBroker 를 이용하는 것이다. 미국 ISP 업체인 Hurricane Electric 에서 제공하는 Tunnel Broker는 아래 주소로 접속하여 가입하면 무료로 IPv6 주소를 할당 받아 사용할 수 있다.
Yocto Project를 보면 OpenEmbedded, bitbake, poky 와 같은 용어들이 나온다. Bitbake는 Yocto Project의 make 툴이라고 이해하면 되는데, 다른 용어는 어떤 의미 인지 모호할 수 있다. OpenEmbedded와 Yocto Project와의 관계는 어떤 것인지, Poky는 범위가 어떤 것인지 메뉴얼을 보아도 정확히 감을 잡기가 어렵다.
개념적으로 잘 정리된 관계는 Yocto Project Overview and Concepts Manual, 2.1 What is the Yocto Proejct?"에 있는 아래 그림이다.
Yocto Elements 우선은 이를 이해하기 위하여는 Yocto Project가 발전한 변천사를 보는 것이 좋다.
Orange Pi 는 Allwinner(SUNXI) 의 application chip으로 만들어진 single board computer이다. Raspberry Pi 와 비슷하다고 볼 수 있는데, 이것과 비교하여 주요 장단점은 다음과 같다.
장점 Cortex A8 single core부터 octa core 까지 라인업 Mali400 GPU 내장 무엇보다도 가격이 저렴. 아래에서 사용하는 Orange Pi R1의 경우 소비자가가 $9.99. 단점 CPU 사양이 제대로 공개가 안됨. 그나마 H3 정도까지는 인터넷 커뮤니티에 어느정도 공개 됨 발열이 심함. Orange Pi R1의 경우도 별도로 방열판을 붙어야 안정적임 이 문서에서는 Orange Pi R1을 제품에 적용하기 위하여 보드 이미지 설정을 하는 과정을 정리한 것이다.
WICED와 같은 임베디드 디바이스용 SDK는 FreeRTOS, ThreadX와 같은 RTOS의 multi tasking 기능을 이용하여 여러개의 task를 생성하여 주변기기를 제어하거나 네트워크로 데이타 송수신 한다. 일반적인 산업용 기기의 센서 동작은 realtime 요구 사항에 맞추어 task로 분리하여 작성하면 된다. 하지만 가정용 IoT 기기를 만들다 보면 이와 같은 multi task 방식 보다는 하나의 task에서 event driven 방식으로 구현을 하는 것이 편리할 때가 있다.
이 문서에서는 가정용 기기의 특징과 이를 task 방식으로 구현하였을 때의 단점을 설명하고, 구현한 event loop library를 설명한다.
Embedded 형태의 IoT의 센서 노드를 개발하기 위한 플랫폼(HW + SW SDK)은 다양해져서 잠깐만 인터넷 검색을 해보아도 여러 솔루션을 찾아 볼 수 있다. 특히 센서 노드의 특성 상 이들 SDK는 IEEE 802.15.4(Zigbee, Thread), IEEE 802.15.1(Bluetooth, BLE), IEEE 802.11(Wi-Fi)와 같은 wireless internet connectivity가 주요 기능으로 들어간다.
이 문서에서는 제품에 Wi-Fi 기능을 넣기 위하여 솔루션 선정 시 고려할 사항들을 정리한다.
Constrained DevicesIoT 센서 기기와 같은 경우는 배터리로 구동하거나, 낮은 사양 등 일반 PC 나 android 기기에 비하여 저사양 기기라고 할 수 있다.
이글은 Python 비동기 프로그래밍 제대로 이해하기(1/2) 에 이어서 작성한 글이다.
AsyncioPython 3.4 에서는 그동안 Twisted, Tornado와 같이 별도의 library로 제공되던 event loop 방식의 비동기 프로그래밍이 asyncio (PEP 3156 – Asynchronous IO Support Rebooted: the “asyncio” Module) 표준 라이브러리로 새로 추가되었다.
각각의 event loop 구현이 비슷하지만 약간의 차이가 있어서 이들을 혼용하여 사용할 때 차이점을 이해하는데 부담이 있지만, 시간이 지나며 이들도 asyncio로 통합 지원하는 방향으로 되는 것 같다. 참고로 2018년 3월에 새로 릴리즈된 Tornado 5.
Python2 와 비교하여 python3의 가장 돋보이는 killer feature 는 비동기 프로그래밍 지원이라고 할 수 있다. 이를 위하여 python 3.4에 asyncio 모듈이 추가되었고, python 3.5 에는 native coroutine 지원을 위한 async, await 키워드가 추가되었다. 이들 기능을 이용하면 javascript나 다른 언어에서 지원하는 비동기 프로그래밍의 장점을 python 에서도 사용할 수 있다. 즉, 이벤트 방식이지만 blocking 방식의 프로그래밍 처럼 sequential 하게 코드를 작성할 수 있어, 단일 thread로 수만개의 네트워크 연결을 처리하는 서버를 오류 가능성을 최소화 하면서, 보다 편하게 개발할 수 있다.
가정에서 인터넷을 사용하다 보면 미국으로 연결이 상당히 느린 경우가 있다. 지금 내가 일하고 있는 곳도 그런 상태이다. 국내 사이트 연결은 거의 지연을 느끼지 않을 정도로 빠르게 연결되나, 미국 사이트는 그렇지 않다. 일반 웹페이지는 그럭저럭 참고 사용하면 되지만 GitHub에서 linux와 같이 history가 큰 소스를 clone 하려면 하루 꼬박 걸릴 정도로 속도가 나오지 않는다.
Who is my ISP? 로 확인해 보니 역시나 LG 유플러스 망을 사용하고 있다. 국내는 워낙 인터넷 망이 잘 연결되어 큰 문제가 없지만 미국과 같이 해외로 나가는 경우는 통신 사업자가 어떤 광케이블을 계약해서 사용하느냐에 따라 속도가 제각각이 된다.
Yocto Project나 Buildroot를 이용하여 embedded linux 시스템을 빌드하면 SD card나 MMC에 쓸수 있는 이미지까지 생성해 준다. 하지만 빌드되는 디스크 이미지 형태와 다르게 파티셔닝을 하려면 관련된 정보들을 알고 있어야 한다.
여기에서는 dd, truncate, fdisk, parted, mount, losetup 등의 utility를 이용하여 디스크 이미지를 생성, 수정, 관리하는 방법을 정리한다.
물리적인 저장 디스크 관리Linux의 경우 저장 디스크는 block device로 /dev 디렉토리에 아래와 같은 디바이스 파일이 생성된다. 아래의 예는 sda SSD 디스크로 한 개의 파티션(sda1)이 있다.