'오픈소스'에 해당되는 글 2건

  1. 2015.10.22 Toybox 오픈소스 프로젝트 참여하기 -1
  2. 2015.09.23 Toybox 오픈소스 프로젝트 소개 (2)
/* 
written by kaspy (kaspyx@gmail.com)
*/ 

toybox 공식 홈페이지 : http://www.landley.net/toybox/


- 리눅스 유틸리티 프로그램

- BSD License


프로그래머라면 누구나 한번 해보싶은게 오픈소스에 참여하여 자신의 copyright이 새겨 contribution을 하는것을 해보고 싶지 않을까요??  


오픈소스 프로젝트 toybox에 참여하는것도 좋은 방법입니다.


아래 설명은 http://www.landley.net/toybox/code.html 에나와있는 내용을 정리한 내용입니다.


1. 소스코드 clone 하기


 오픈소스니까 당연히 소스코드가 공개되어있습니다!! mercurial을 통해서 소스코드를 가져오는방법입니다.
(머큐리얼 설치는 'sudo apt-get install mercurial')


아래 명령어는 홈 디렉토리 경로(~) 아래에있는 toybox 디렉토리에 최신버전에 대한 코드를 다운받는 명령입니다.


hg clone http://landley.net/hg/toybox ~/toybox



2. 빌드 & 컴파일 하기


 다운받은 소스코드를 빌드 하기위한 명령어는 아래와 같이 하나씩 순차적으로 실행해주면 됩니다.


첫번째 "make defconfig" 명령어는 빌드할 명령어를 어떤것들로 지정해주는지를 기본으로 지정해줍니다.


두번째는 지정된 명령어를 빌드를 합니다.

(마지막 "make install" 명령어는 굳이 실행하지 않아도 되는데 환경변수에 등록해주는 명령어입니다.)


make defconfig

make

make install


빌드가 완료되면 아래와 그림과 같이 초록색 이름인 실행 바이너리(ELF)가 만들어지게 되니다.



사용법은, 빌드한 toybox를 실행하려면 아래와 같이 "./toybox ls" 같이 명령어를 실행해줍니다.



help 명령어를 사용하여 각 명령어에대한 ls 명령어에대한 사용법(usage)를 확인할수 있습니다.



명령어들은 기본적으로 종류별 toybox 디렉토리 경로 아래 toys/posix, toys/android, toys/lsb 디렉토리 경로에 소스코드가 위치해있습니다.


3. 명령어 추가/구현 하기


1) 코딩 스타일: 기본적으로 리눅스 커널 코딩 스타일을 따르는데 관련 내용은 여기를 참조하면되는데, 뭐.. 그리중요하진않슴니다.


2) 샘플 코드 복사하기 


toybox는 아직 busybox에 비해 구현된 명령어가 부족한 편입니다. 


구현 완료된 명령어는 여기링크를 참조하고, 만들어보고 싶은 (간단한 명령어 부터)명령어가 있다면  도전해보는것도 좋을거같습니다.


명령어를 추가 구현하기위한 가장 좋은 방법은 toybox 내에 있는 샘플 명령어 소스코드를 복사해서 수정하여 사용하는 것이 제일 좋습니다.


샘플 소스코드는 toybox 디렉토리 아래 toys/example/hello.c 그리고 toys/example/skeleton.c 에 위치해있습니다.


hello.c 라는 파일은 "Hello world"를 출력해주는 간단한 샘플 코드입니다.


이파일을 복사 및 수정하여 새로운 명령어를 추가해보도록 하겠습니다.


 저는 first 라는 명령어로 이름을 정하여 설명 하도록 하겠습니다. 복사할 위치는 "toys/other" 디렉토리 경로 아래로합니다.

(cp toys/example/hello.c toys/other/first.c)



우선 hello.c 라는 소스코드의 내용은 아래와 같습니다. (수정해야할 내용은 빨강색 박스로 표시)



3) 코드 수정하기


위에 그림처럼 수정해야할 내용은 빨강색으로 표시를 해두었습니다.


첫번째 빨강색 박스는 구현한 날짜, 자신의 copyright 및 이메일주소, 레퍼런스 및 관련 URL을 기입합니다.


두번째 빨강색 박스는 config에 대한 파일입니다.


아래와 같이 수정해줍니다.


USE_HELLO(NEWTOY(hello, 0, TOYFLAG_USR|TOYFLAG_BIN))

 

config HELLO

  bool "hello"

  default n

USE_FIRST(NEWTOY(first, 0, TOYFLAG_USR|TOYFLAG_BIN))

 

config FIRST

  bool "first"

  default y


help 문자 아래는 "toybox help 명령어"를 쳤을때 사용법에 대한 내용을 출력해줍니다.


세번째 #define FOR_hello 는 #define FOR_first


맨 아래 hello_main() 은 first_main() 으로 수정해줍니다.


저는 first 라는 명령어를 그냥 제가 원하는 문자열을 출력해주게 만들었습니다(첨부파일 및 아래 그림 참조)

first.c




4) 명령어 빌드하기

 

 추가한 명령어는 2번의 과정을 다시 한번 해주면 됩니다.


반드시 "make clean" 명령어를 실행한 다음에 아래의 명령어를 순차적으로 실행해줍니다.


make clean

make defconfig #(or menuconfig)

make


추가한 명령어 실행은 아래와 같이 확인합니다.



4. 명령어 기부(Contribution) 하기


 구현 완성한 명령어는 toybox@lists.landley.net 에게 보내주면 됩니다. 물론 저런 명령어를 contribution 할수는 없겟죠.. 


하지만 리눅스를 다루면서 편리하게 할수있는 명령어나, 자신이 구현할줄아는 명령어가 있다면, 또는 새로운 명령어를 만들고싶다면 도전해보시기 바랍니다.


아래 링크, 메일링 리스트에 가입하여 toybox에 대한 궁긍한 내용이나 이슈를 같이 공유하는것도 좋은 방법입니다.


http://lists.landley.net/listinfo.cgi/toybox-landley.net


5. 마치며


 이로써 toybox 오픈소스 프로젝트에 대한 내용을 다루어보았습니다. 다음에는 tobyox 에서 사용하는 래퍼(wrapper) 함수 및 명령 옵션 파라미터 사용법 그리고 실제 contribution한 명령어를 다루도록 하겠습니다.


* 참조 내부링크


 - Toybox 오픈소스 프로젝트 소개


저작자 표시
신고
Posted by 캐스피
/* 
written by kaspy (kaspyx@gmail.com)
*/ 


toybox 공식 홈페이지 : http://www.landley.net/toybox/

프로그래머라면 누구나 한번쯤 관심가져볼만한(?)것이 바로 오픈소스 프로젝트에 참여하는거 아닐까요??ㅎㅎ
개발이 그리 많이되지않았고, 아직 그렇게 많이 알려지지않은 오픈소스 프로젝트가 있는데 하나 소개할까 합니다.

toybox는 리눅스 명령어를 모아둔 유틸리티로써 무료로 배포되는 오픈소스 프로젝트입니다. 2006년부터 개발이 시작되었고 Robert Landley(이하 Rob)에 의해서 유지보수 되고 있습니다. 비슷한 프로젝트로는 busybox나 toolbox 등이 있겠네요.


참고로 

Rob은 busybox 프로젝트 참여 멤버로서 있다가 따로 나와서 toybox 오픈소스를 만들었다고 하네요~


* toybox와 busybox의 다른점


 둘다 리눅스 명령어를 탑재한 유틸리티 오픈소스 프로젝트라는 것과 목적은 같지만 toybox는 BSD 라이선스를 사용하고 있지만 busybox는 GPL2 라이선스를 사용하고 있다는 점에서 조금 다릅니다.(그리고 busybox가 구현된 명령어가 훨씬 많습니다.)

라이선스 때문에 무슨 차이가 발생할수 있냐면 일반적으로 busybox나 toybox는 리눅스 운영체제를 탑재한 임베디드 환경에서 작동을 하는데(예를들어 스마트폰, TV, 냉장고 등등) 만약 busybox와같은 GPL2 라이선스를 사용하여 임베디드 환경에서 개발을 하게되면 busybox의 소스코드를 참고하여 만든 산출물은 모두 GPL2로 묶이게 된다는거죠. 그래서 제품을 출시할때에도 제품 가이드 문서등에 이 제품은 busybox 유틸을 사용하였다는 고지문과 함께 관련 소스코드도 반드시 공개를 해야한다는 원칙을 가지게 됩니다.

그러나 toybox는 조금 다른 BSD 라이선스를 사용하고 있는데, 이 라이선스는 소스코드를 사용하게되도 그냥 toybox 소스코드를 썻다는 고지문 하나만 제품 가이드 문서에 고지하면 되는것입니다.

만약 오픈소스 라이선스에 대한 준수사항을 지키지 않으면 위반에 해당되어 법적으로 소송을 받을수도 있습니다.


* toybox 특징

- 디자인 및 목적

 toybox는 심플함과 경량화 그리고 빠른 속도 그리고 모든 명령어 지원을 추구합니다.

 명령어 구현 및 속도 그리고 사이즈의 경량화의 추진의 최적화를 목표로 개발 중입니다.

 명령어 구현 roadmap은 여기를 클릭해주세요

 

- 이식성 문제

리눅스 운영체제 계열에서 작동함

32bit/64bit 지원

Unsigned char 기본 문자

문자열 처리는 UTF8로 하는것이 최종목표


바이너리 다운로드 

http://www.landley.net/toybox/bin/


나는 리눅스용 x86/64bit 바이너리를 다운받았습니다.


현재 toybox에서 지원하는 명령어는 아래와 같습니다.


acpi base64 basename blkid blockdev bzcat cal cat catv chattr chgrp

chmod chown chroot chvt cksum clear cmp comm count cp cpio cut date

df dirname dmesg dos2unix du echo egrep eject env expand factor false

fgrep find free freeramdisk fsfreeze fstype grep groups halt head

help hexedit hostname hwclock id ifconfig inotifyd insmod install

ionice iorenice kill killall killall5 link ln login logname losetup

ls lsattr lsmod lspci lsusb makedevs md5sum mix mkdir mkfifo mknod

mkpasswd mkswap mktemp modinfo mount mountpoint mv nbd-client nc netcat

nice nl nohup nproc nsenter od oneit partprobe passwd paste patch

pidof pivot_root pmap poweroff printenv printf pwd pwdx readahead

readlink realpath reboot renice reset rev rfkill rm rmdir rmmod sed

seq setsid sha1sum shred sleep sort split stat strings su swapoff

swapon switch_root sync sysctl tac tail taskset tee time timeout touch

true truncate tty umount uname uniq unix2dos unlink unshare uptime

usleep uudecode uuencode vconfig vmstat w wc which who whoami xargs

xxd yes


분명 busybox의 명령어에 비해 없거나 부족한 기능이 많을수 있겠지만 라이선스도 자유롭고 busybox만의 무거움을 탈출하고 싶다면 toybox를 사용해도 좋을것이라고 생각합니다.ㅋ



저작자 표시
신고
Posted by 캐스피


티스토리 툴바