License file meosigi generator
프로젝트를 구성하면서 라이선스를 표시할 때 주로 사용하는 방법은 프로젝트에 LICENSE
파일을 생성하여, 라이선스를 나타내는 것입니다.
개발 환경 상 CLI에서 작업하는 경우가 많았고, 라이선스를 Github 등에서 찾아가며 복사하여 파일을 생성하고, 이러한 과정이 번거롭다 보니 이 프로젝트를 만들었습니다.
$ sudo snap install lfmg
snap 스토어에 등록하여, snap
으로 설치 가능합니다.
주의
- snap 정책 상 홈 디렉토리 안에서만 파일을 생성할 수 있습니다.
- 1.3.0 미만 버전은 작동하지 않습니다.
- mit 라이선스로 배포됩니다. 자유롭게 사용 가능합니다.
- 빠르게 기능만 구현한 코드라 완성도가 높진 않습니다. 스케치만 빠르게 한 느낌?
명령어
list, l show "LICENSE" list
generate, gen, g generate "LICENSE".
info, i get license info
body, b show "LICENSE" content
cache, c cache control
help, h Shows a list of commands or help for one command
- list : 생성 가능한 라이선스 항목을 보여줍니다.
- generate : 라이선스 파일을 생성합니다.
- info : 라이선스의 간략한 설명을 출력합니다.
- body : 라이선스 본문을 출력합니다.
- cache : 서버 요청을 줄여보고자
~/.cache/lfm
에 라이선스 정보를 캐싱합니다. 이를 관리하는 명령 입니다. - help : 도움말
사용법
list
$ lfmg l
key : id : name
agpl-3.0 : AGPL-3.0 : GNU Affero General Public License v3.0
apache-2.0 : Apache-2.0 : Apache License 2.0
bsd-2-clause : BSD-2-Clause : BSD 2-Clause "Simplified" License
bsd-3-clause : BSD-3-Clause : BSD 3-Clause "New" or "Revised" License
bsl-1.0 : BSL-1.0 : Boost Software License 1.0
cc0-1.0 : CC0-1.0 : Creative Commons Zero v1.0 Universal
epl-2.0 : EPL-2.0 : Eclipse Public License 2.0
gpl-2.0 : GPL-2.0 : GNU General Public License v2.0
gpl-3.0 : GPL-3.0 : GNU General Public License v3.0
lgpl-2.1 : LGPL-2.1 : GNU Lesser General Public License v2.1
mit : MIT : MIT License
mpl-2.0 : MPL-2.0 : Mozilla Public License 2.0
unlicense : Unlicense : The Unlicense
생성 가능한 라이선스 리스트를 출력합니다.
generate
$ lfmg g -y 2021 -o vompressor mit
generated license mit to LICENSE
must modify year and creator
e.g. MIT License [3:15] and [3:22]
Copyright (c) [year] [fullname]
^ ^
라이선스를 생성 합니다.
- -y : 년도 설정이 가능한 경우 년도를 설정해줍니다.
- -o : 소유자 설정이 가능한 경우 소유자를 설정해줍니다.
Copyright (c) 2021 vompressor
- -p : 경로를 지정합니다.
~/project/LICENSE
를 생성하려면
다음처럼 옵션을 지정합니다.-p ~/project/
기본값은 현재 디렉토리 입니다.
info
라이선스의 정보를 출력합니다. -b
플래그 지정 시, 라이선스의 전문을 같이 출력합니다.
$ lfmg info gpl-3.0
key: gpl-3.0
id: GPL-3.0
url: http://choosealicense.com/licenses/gpl-3.0/
description:
...
implementation:
...
permissions: ...
conditions: ...
limitations: ...
body
라이선스 전문을 출력합니다.
$ lfmg b apache-2.0
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
...
cache
캐시를 지웁니다.
$ lfmg cache clear
cache clear..
캐시 위치는 ~/.cache/lfm 입니다. 운영체제에 따라 다를 수 있습니다.
어려웠던 점
Snapcraft
스냅 패키지를 등록하기 위해 snapcraft
를 사용합니다.
공식 가이드를 보고도 어려워서 이미 snap에 등록된 패키지 github를 찾아보며 해결 했습니다.
본 프로젝트의 snapcraft.yaml
파일입니다.
plugs
snap은 apt등과 달리 자체 샌드박스 환경에 패키지를 설치합니다.
본 운영체제와 독립 시켜, 보안성과 호환성을 챙겨보겠다는 것 인데 이걸로 애를 많이 먹었습니다.
분명 go에서 바로 build한 바이너리는 문제가 없었는데, snap으로 설치하면 네트워크가 막혀있었습니다.
알고보니 snapcraft.yaml
에 plug 설정을 해주어야 네트워크에 접속 가능했습니다.
plug는 쉽게 시스템 접근 권한을 허용한다고 생각하면 좋을 것 같습니다.
apps:
lfmg:
command: bin/lfmg
plugs:
- home
- network
snap 패키지 빌드
lfmg
는 Vultr 우분투 20.04 호스팅에 code-server를 올려 웹에서 코딩했습니다.
snapcraft는 패키지를 만들 때 하드웨어 가상화를 사용합니다.
클라우드 환경이라 그런건 없어서 lxd
를 사용하여 해결했습니다.
빌드 시간
호스팅 환경 때문인지 패키지 하나 빌드에 5~10분이 소모되었습니다. 서버는 amd64이지만, i386이나 arm64환경을 위한 빌드도 필요했습니다.
Github 리포지토리를 읽어, 자동으로 빌드해주는 서비스가 있어 이를 사용했습니다.
i386이나 arm 환경도 빌드, 테스트 해줍니다.
TODO
- 에러 메세지
- 파일 읽기, 쓰기 권한 설정
- Github api -> 내 api 서버로 옮기기
- 커맨드 힌트