License file meosigi generator

lfmg

vompressor/lfmg
Contribute to vompressor/lfmg development by creating an account on GitHub.
vompressor/license_generator
Contribute to vompressor/license_generator development by creating an account on GitHub.

프로젝트를 구성하면서 라이선스를 표시할 때 주로 사용하는 방법은 프로젝트에 LICENSE 파일을 생성하여, 라이선스를 나타내는 것입니다.

MIT License

Copyright (c) 2021 vompressor

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
예시) mit

개발 환경 상 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 파일입니다.

vompressor/lfmg
Contribute to vompressor/lfmg development by creating an account on GitHub.

plugs

snap은 apt등과 달리 자체 샌드박스 환경에 패키지를 설치합니다.

본 운영체제와 독립 시켜, 보안성과 호환성을 챙겨보겠다는 것 인데 이걸로 애를 많이 먹었습니다.

분명 go에서 바로 build한 바이너리는 문제가 없었는데, snap으로 설치하면 네트워크가 막혀있었습니다.

알고보니 snapcraft.yaml 에 plug 설정을 해주어야 네트워크에 접속 가능했습니다.

plug는 쉽게 시스템 접근 권한을 허용한다고 생각하면 좋을 것 같습니다.

apps:
  lfmg:
    command: bin/lfmg
    plugs:
      - home
      - network
Interface management | Snapcraft documentation
Snaps are containerised software packages that are simple to create and install. They auto-update and are safe to run. And because they bundle their dependencies, they work on all major Linux systems without modification.
Snapcraft top-level metadata | Snapcraft documentation
Snaps are containerised software packages that are simple to create and install. They auto-update and are safe to run. And because they bundle their dependencies, they work on all major Linux systems without modification.

snap 패키지 빌드

lfmg 는 Vultr 우분투 20.04 호스팅에 code-server를 올려 웹에서 코딩했습니다.

snapcraft는 패키지를 만들 때 하드웨어 가상화를 사용합니다.

클라우드 환경이라 그런건 없어서 lxd 를 사용하여 해결했습니다.

Build on LXD | Snapcraft documentation
Snaps are containerised software packages that are simple to create and install. They auto-update and are safe to run. And because they bundle their dependencies, they work on all major Linux systems without modification.

빌드 시간

호스팅 환경 때문인지 패키지 하나 빌드에 5~10분이 소모되었습니다. 서버는 amd64이지만, i386이나 arm64환경을 위한 빌드도 필요했습니다.

Github 리포지토리를 읽어, 자동으로 빌드해주는 서비스가 있어 이를 사용했습니다.

i386이나 arm 환경도 빌드, 테스트 해줍니다.

Snapcraft - Snaps are universal Linux packages
Snaps are containerised software packages that are simple to create and install. They auto-update and are safe to run. And because they bundle their dependencies, they work on all major Linux systems without modification.

TODO

  • 에러 메세지
  • 파일 읽기, 쓰기 권한 설정
  • Github api -> 내 api 서버로 옮기기
  • 커맨드 힌트