앞에서 Visual Studio Code를 웹으로 사용하는 방법을 알아보았다.


Web based Visual Studio Code (Online VSCode)

https://www.whatwant.com/entry/Web-based-Visual-Studio-Code-Online-VSCode




그러면 이번에는 Python Code를 작성하기 위한 과정을 살펴보자.





아! 기본 운영체제는 Ubuntu 18.04 이다.






[ Python ]


Python을 설치하자.

2.x 와 3.x 모두 설치해버리자.


❯ sudo apt install python python-pip virtualenv

❯ sudo apt install python3 python3-pip python3-venv







[ Extension ]


VSCode를 실행하고...

왼쪽 제일 아래 아이콘을 클릭하면 VSCode의 Extension을 고를 수 있는 화면이 나온다.





검색어를 넣어서 검색을 해도 좋고,

보이는 것을 클릭해도 된다.


Python 관련 여러개의 Extension이 보이겠지만,

Microsoft에서 제공해주는 아이로 설치하자.


오른쪽에 나오는 화면의 "Install"을 클릭하면 된다.





설치가 되었지만, 바로 적용되는 것은 아니다.


"Reload Required"를 클릭해버리면 된다.








[ File ]


Python 파일을 만들기에 앞서서,

작업을 할 디렉토리가 먼저 준비되어야 한다.


미리 생성해놓을 수도 있고

VSCode에서 생성을 할 수도 있다.





원하는 디렉토리를 고르면 된다.





그리고, "New File"을 선택해서 파일 이름을 정해주면 된다.










[ Error ]


간단한 Python 파일을 만들고 실행을 해보기 전에,

어떤 버전의 Python을 사용할 것인지를 선택해보자.





왼쪽 아래에 나오는 "Python 3.6.9 64-bit" 부분을 클릭했더니...

에러가 발생했다.


"command 'python.setInterpreter' not found"


필요한걸 찾을 수가 없단다.



지금 code-server로 구동되고 있는 VSCode와 Extension의 궁합이 맞지 않아 발생하는 에러로 보인다.

(이걸 알아내기 위해 정말 오랫동안 삽질을... ㅠㅠ)









[ Extension Downgrade ]


왼쪽 아래 아이콘을 눌러서 Extension 메뉴로 간 뒤에

왼쪽 Installed 항목에 있는 Python에서

기어(Gear) 모양의 버튼을 누르고

"Install Another Version..." 메뉴를 선택하자.





주르륵 나오는 버전 중에서

"2020.5.86806"

버전을 고르자





"Reload Required"

눌러서 재시작~





못보던 아래와 같은 화면이 나오면 성공~!!!











[ Select Linter ]



Python Coding Style을 검사할 엔진(?)을 고르는 것이다.


위에 나오는 화면에서 "Select Linter"를 선택하거나


[Ctrl + Shift + P]를 눌러서 나오는 화면에서 "Linter" 타이핑해서

"Python: Select Linter"를 선택하자.





개인적으로는 "flake8"을 선호한다.


그러면 끝~!!








[ Run ]


이제, 다시 진행해보자.


왼쪽 아래에 나오는 "Python 3.6.9 64-bit" 부분을 클릭해보자.





Python 2.x를 사용할지

Python 3.x를 사용할지

고르면 된다.


소스 코드에서

마우스 오른쪽 버튼을 누르고

메뉴 중에서

"Run Python File in Terminal"

클릭~





아래와 같이 실행 결과가

Terminal 윈도우에 나온다.





끝~




반응형


짜증나는 오류 보고 메시지...



원인을 찾아보기 위해 로그를 뒤져보았다.


$ nano /var/log/syslog


어라?! 진짜로 error 메시지가 보이네....



Nov 15 01:31:05 u12-VBox NetworkManager[839]: <info> DNS: starting dnsmasq...

Nov 15 01:31:05 u12-VBox NetworkManager[839]: <error> [1447518665.535971] [nm-dns-dnsmasq.c:393] update(): dnsmasq not available on the bus, can't update servers.

Nov 15 01:31:05 u12-VBox NetworkManager[839]: <error> [1447518665.536318] [nm-dns-dnsmasq.c:395] update(): dnsmasq owner not found on bus: Could not get owner of name 'uk.org.thekelleys.dnsmasq': no such name

Nov 15 01:31:05 u12-VBox NetworkManager[839]: <warn> DNS: plugin dnsmasq update failed



뭔가 해보자.


$ sudo cp /usr/share/doc/dnsmasq-base/examples/dnsmasq.conf.example /etc/NetworkManager/dnsmasq.d/dnsmasq.conf


샘플 복사하고...


#strict-order


→ strict-order


주석 지워주자!



$ sudo restart network-manager



서비스 재시작!




반응형

어이없게도 Gitolite의 설치나 설정만 신경썼지,
사용자를 추가하는 것과 repository를 추가하는 것은 신경도 안썼다.

소사~ 소사~ 맙소사~!!!

     - http://sitaramc.github.com/gitolite/users.html


물론 앞에서 설명한 것들을 잘 조합하면 사용자 추가하는 방법과 repository 추가 등록하는 방법을 알 수는 있지만,
나름 정리하는 차원에서 다시 한 번 살펴보자.



1. 사용자 추가하기

     - Gitolite는 SSH 공개키 (public key) 파일로 사용자 등록을 한다.


$ ssh gitolite@localhost
$ cd ./repositories/gitolite-admin
$ cd ./keydir
$ scp chani@localhost:/home/chani/.ssh/id_rsa.pub ./chani.pub

     - Gitolite 관리자 계정으로 들어가서 clone 해놓은 [ gitolite-admin ] repository 에 위치하자.
     - [ gitolite-admin ] repository를 살펴보면 [ keydir ] 디렉토리가 있다. 이곳이 바로 공개키를 넣을 곳이다.

     - 내 경우는 "scp"를 이용해서 'chani' 계정의 공개키를 복사해왔다.

     - 여기에서 중요한 점은 가져온 공개키의 파일명이다. chani 계정의 경우 [ chani.pub ]라고 이름을 지어줬다.
     - 그러면 다르게 하는 경우도 있지않을까?라는 의문점이 드는데... 불행하게도(?) 그렇다.

     - 사용자 1명이 1개의 공개키를 사용하면 무관하지만, 복수개의 공개키를 사용할 때에는 어떻게할까?!
     - [ chani@gmail.pub, chani@whatwant.pub ] 처럼 파일이름을 해도 되고,
     - [ chani@gmail.com.pub, chani@whatwant.com.pub ] 처럼 파일이름을 해도 된다.



2. Error

     - 그런데, 여기에서 에러 상황이 발생했다.


$ git add ./keydir/chani.pub
$ git commit -a -m "add user 'chani'"
$ git push

     - 여기에서 경고 메시지를 발견했나요?

remote: WARNING: keydir/chani.pub duplicates a non-gitolite key, sshd will ignore it

     - 어?! gitolite가 아닌 키가 중복된다고?! sshd가 이걸 무시할거라고? 이게 뭔말이지?
     - 매뉴얼 등에서 이런 말은 못들었는데~!!!

     - 그래서 뭔가 이상해서 chani의 SSH 키 파일을 새로 생성해서 gitolite-admin/keydir/ 에 다시 등록해보았다.
     - 그랬더니 이번에는 push가 잘 되었는데...

     - chani 계정에서 ssh로 git-repo@localhost 에 접근을 할 수가 없는 것이다.
     - 새로 생성한 공개키를 git-repo@localhost 에 등록하지 않았으니,
     - 즉, 예전 공개키가 등록이 되어있으니 당연한 것이다.

     - 이 때 번뜩 떠오른 생각이 있으니...


     - "chani"라는 계정의 공개키를 지금 현재 2가지의 목적으로 사용하려고 하고 있는 것이다.
     - 물론 내부적으로는 SSH를 이용하고 있다는 점은 같지만,
     - SSH Console 로 접속을 하는 한가지와 Gitolite로 접속하는 한가지...
     - 즉, 2가지 접근 방법을 하나의 통로로 사용하려는 것이다.

     - 그럼 내부적으로 이걸 어떻게 확인할 수 있을까?


$ nano ./.ssh/authorized_keys


     - Gitolite 관리자 계정에서 [ ./.ssh/authorized_keys ] 파일을 확인해보자.


     - 어?! 이상한 내용이 추가되어 있다!!! [ # gitolite start ~ # gitolite end ] 라는 문장들이다.

     - 정확한 내부 로직은 분석을 해보지 않았지만 (솔직히 좀 귀찮다.... 흑... 분석해보면 도움이 될거라는 것은 알지만)
       일단 기본적인 SSH Login 흐름을 Gitolite가 가로채서 자신의 공개키로 인증하게 하는 것으로 추정이 된다.

     - 그러다보니 여기에서 문제가 발생하는 것이다. 같은 공개키를 사용하려하면 이 놈이 햇갈려하는 것 같다.

     - 결론은 같은 공개키로 SSH와 Gitolite를 사용하는 것은 안된다.
     - 어떻게 하면 할 수는 있겠지만, 문제의 소지가 있는 것은 원천적인 해결책을 찾기 전엔 하지 않는 것이 좋다!


     - 일단, 위와 같은 과정을 통해서 사용자 추가는 되었다!



3. Repository 추가하기

     - Gitolite로 관리하는 repository로 만들기에 대해서 알아봐야 하는데, 실은 엄청 쉽다.
     - 지금까지 Gitolite의 환경 파일 [ ./conf/gitolite.conf ] 파일에 해당 repository 정보만 적어주면 되는 것이다.

     - 문제는 이렇게만 알고 있다고 끝이 아니다!!! 이게 생각보다 복잡하다.



4. New Repository 생성하기

     - 신규로 repository를 생성하는 방법은 어떻게 될까?!


repo bare2repo
             RW+          = @whatwant

     - 실제로 존재하지 않는 [ bare2repo ]라는 이름의 repository에 대해서 권한 설정을 해준다.
     - 당연히 commit 하고 push 하는 것은 잊지 않기를...


     - 이제 어떻게 repository가 생기는 것인지 해보자.



     - 위와 같이 repository를 clone을 해서 사용할 수 있다.
     - 여기에서 포인트는 Server에 [ bare2repo.git ] repository가 없는데도 clone을 할 수가 있다는 점이다.

     - 그럼 여기에서 드는 궁금증. Gitolite의 권한 설정 없이 그냥 아무 이름이나 사용해서 가능할까?


     - 위 스크린샷과 같이 에러가 발생한다.


     - 결론!! 새로운 repository를 만들고 싶으면 [ ./conf/gitolite.conf ] 파일에 권한 설정을 해주면 된다!!!



5. Existing repository

     - 이번 포스팅에서 개인적으로 가장 큰 관심이 있는 부분은 바로 이것이다!
     - 기존에 작업하던 repository를 셋팅한 여기 이 Server에 넣어서 관리를 하고 싶을 때 어떻게 하면 될까?!


     - "git-repo" 계정으로 접속해서 가져오고 싶은 repository를 가져오자.
     - [ scp -r ] 명령으로 repository를 전송 받아오면 된다. (가져오는 방법은 각자 다양하게 있을 것이다)

     - 차례대로 따라왔으면 눈치챘겠지만, 가져왔으면 당연히 [ gitolite-admin/conf/gitolite.conf ] 파일을 손봐야한다.


repo bare1repo
             RW+          = @whatwant

     - "bare1repo" repository에 대한 설정을 넣어주면 된다. (commit & push 는 이제 더 이상 말하지 않아도...)

     - [ RW+    personal/USER/ = @whatwant ] 줄은 무시하시길....^^ 다음 포스팅 때 알게될것이니....

     - bare1repo.git repository를 위치에 놓고 계정 권한 설정을 했으니 이제 OK?????


     - 바로 해당 repository를 clone을 하면 위와 같이 error가 발생을 한다.
     - [ gl-conf ]를 못찾는다고 하는데, 대체 [ gl-conf ]가 뭐길래?


     - 혹시나하고 [ gitolite-admin.git ] repository에서 살펴보니 위와 같이 존재한다.
     - 내용은 계정에 대한 정보이다. 아마도 'GitoLite-CONFig' 파일인가보다.


     - 그래서 복사해 놓은 "bare1repo.git " repository의 파일을 살펴보니 당연하게도 [ gl-conf ] 파일은 없다.

     - 그러면, 이걸 어떻게 만들어 넣을 수 있을까?
     - 이 질문을 바꾸면 Gitolite에게 이 repository의 존재에 대해서 어떻게 알려줄 수 있을까?


$ ~/gitolite/src/gitolite setup

     - [ ~/gitolite/src/gitolite setup ] 명령을 실행시키면 [ gl-conf ] 파일이 생성이 된다.
     - 아무런 메시지를 보여주지 않아서 쫌 썰렁하지만, 너무나 간편하다.


     - 다시 clone을 해보면..... 짠~!!! 성공~!!!!



너무 길게 포스팅을 한 것 같지만...
그래도 매뉴얼 같은 곳에서 제대로 된 설명을 찾아보기 힘든 부분이니 잘 참고하세요~^^

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Rebase - 또 하나의 merge  (0) 2012.05.30
Gitolite - Personal Branches  (4) 2012.05.28
Git 계정 관리 - Gitolite's Repository  (4) 2012.05.20
Git 계정 관리 - Gitolite 설정하기  (3) 2012.05.19
Git 계정 관리 - Gitolite 설치하기  (23) 2012.05.15

+ Recent posts