M1 맥북을 경품으로 받았다.

할아버지 맥북(2011)밖에 없었는데, 나에게도 최신 맥북이 생겼다! 앗싸!!

 

그런데, 새로운 나의 맥북이 오자마자 생존의 위협을 받고 있다.

Windows 노트북 2대, 맥북 2대, 안드로이드 태블릿 2대, Windows 데스크탑 1대 ... 등짝 스매싱 각이다.

 

마나님이 새로 생긴 맥북을 어디에 쓸거냐며 스마트폰에서 당근 마켓을 살펴보고 있다.

새로 생긴 맥북에 쓰임새를 주지 않으면 팔려가게 생겼다.

 

flutter 개발 환경을 어서빨리 구축해서

개발 용도로 아주 중요한 아이라고, 꼭 필요한 아이라고 증명해야겠다.

 

 

 

Flutter 개발환경 구축을 위해서는 설치해야할 것들이 많다.

 

1. Android Studio

2. Xcode

3. Chrome

4. VSCode

5. Flutter SDK

6. VSCode Extension - Flutter

 

 

한 번만 고생하면 된다. 하나씩 진행해보자.

 

 

1. Android Studio

  - https://developer.android.com/studio

Android Studio Download

  - 우리 M1은 `Apple chip`을 선택해야 한다.

Agree

  - 그런데, 아직은 호환성이 완벽하지 않은 것 같지만 그래도 나아지겠지 ...

compatibility

 

 

2. Xcode

  - `App Store`를 통해서 설치하면 된다.

  - 오래 걸린다.

Xcode

 

3. Chrome

  - 사실 M1 처음 셋팅할 때 바로 설치를 해서 별도의 스냅샷이 없다 ^^

 

4. VSCode

  - 마찬가지로 처음 셋팅할 때 바로 설치를 해서 ...

 

5. Flutter SDK

  - https://docs.flutter.dev/get-started/install/macos

flutter sdk

  - 우리 M1은 Rossetta 2 사용이 가능해야 한단다.

    . https://github.com/flutter/flutter/wiki/Developing-with-Flutter-on-Apple-Silicon

Rosseta 2

  - 다운로드 받은 후에 압축 풀고 임의의 디렉토리에 위치 시키면 된다.

    . 필자는 `$HOME/install/flutter` 경로에 위치 시켰다.

flutter sdk path

 

6. VSCode Extension - Flutter

  - VSCode에서 Flutter Extension을 설치하자.

Flutter Extension

  - Flutter Extension만 설치해도 Dart Extension은 자동으로 같이 설치 된다.

Dart Extension

 

 

많은 것들을 설치하느라 고생했다.

이제는 환경 설정을 하자.

 

 

7. PATH 설정

  - 필자는 ZSH을 사용하기에 `~/.zshrc` 파일을 수정했다.

  - 앞에서 설치한 `Flutter SDK`의 `/bin` 디렉토리를 추가해주면 된다.

edit PATH

  - 추가한 경로를 로딩시키기 위해 `source ~/.zshrc` 실행하자

source ~/.zshrc

 

8. Run Flutter Doctor

  - Flutter가 잘 설치되어있는지 점검을 해주는 doctor를 실행해보자

    . `Shift+Command+P` 단축키로 Pallete를 실행하자

    . `Flutter: Run Flutter Doctor`를 선택해서 실행하면 된다. (몇 글자 치면 추천 뜬다!)

Run Flutter Doctor

  - SDK 경로를 못찾겠다고 나오면 경로 찾아서 Set 해주면 된다.

    . 여기에서는 `~/install/flutter/bin` 경로로 해주면 된다.

Set Flutter SDK folder

  - OUTPUT 영역에 doctor 실행 과정이 나온다.

flutter doctor

  - Android toolchain 부분과 Xcode 부분에서 issue가 있다고 알려준다

doctor issues

 

9. Android Licenses (+ Android SDK command-line Tools)

  - `flutter doctor --android-licenses`를 실행하면 되는데, 아래와 같이 에러메시지가 나올 수 있다.

android-licenses errors

  - `Android SDK command-line Tools`를 설치해야 한다.

    . 일단 Android Studio를 실행하고

    . Preferences 메뉴를 고르자

Android Studio

    . Android SDK - SDK Tools 메뉴에서 `Android SDK command-line Tools`를 체크하고 Apply 하면 된다.

Android SDK command-line Tools

  - 이제 다시 `flutter doctor --android-licenses`를 터미널에서 실행하면 된다.

    . Accept에서 `y`를 타이핑하면 된다.

android-licenses

 

 

10. Xcode (+ cocoapods)

  - Xcode 관련해서 issues들을 해결해야 하는데, 캡쳐해놓은 것들이 날라가서 그냥 텍스트로 공유하겠다.

 

  - `cocoapods` 설치는 다음과 같이 하면 된다.

 

$ sudo gem install cocoapods -n /usr/local/bin

$ pod setup

 

  - 그리고 아래 것들도 마저 실행해보자.

 

$ sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

$ sudo xcodebuild -runFirstLaunch

 

 

11. 최종 확인

  - 다시 flutter doctor를 실행해서 issues가 없음을 확인하자

no issues

 

 

여기까지~

반응형

 

개인적인 취향으로 Windows 환경에서

개발 비스무리한 것을 하는걸 별로 좋아하지 않지만

이번에 뭔가 해볼 일이 있어서... ^^

 

일단 Python 3.6 이상의 버전 설치가 필요하니 Go! Go! (여기에선 최신 버전은 3.9.7을 설치할 예정임!)

 

 

1. Download and Install

   - 아래 경로에 접속하면 알아서 현재 운영체제에 맞는 버전을 링크해준다.

   - https://www.python.org/downloads/

   - 다운로드 받은 후, 그냥 추천해주는대로 클릭 클릭 하면 설치 완료

 

 

2. PATH 설정

  - 설치가 완료되었지만, 제대로 사용하려면 PATH 설정을 해줘야 한다.

 

  ① 제어판

      - 시작 메뉴의 기어 모양 버튼을 통해 "제어판" 실행

 

   ② 고급 시스템 설정

      - 검색창에서 `고급 시스템 설정`을 타이핑 해서 나오는 결과를 클릭

 

   ③ 환경 변수

      - 속성창에서 `환경 변수` 선택

 

   ④ 시스템 변수 - PATH

      - 하단에 있는 `시스템 변수`에서 `PATH` 항목 찾으면 된다.

 

   ⑤ PATH - 새로만들기

      - `새로만들기`로 추가하면 된다.

      - 21-10-02 기준 Python 3.9.7 에서는 아래 경로였다. (2개 추가해야 한다)

      - 물론 사용자 명칭은 각자 환경에 따라서...

C:\Users\<사용자>\AppData\Local\Programs\Python\Python39\
C:\Users\<사용자>\AppData\Local\Programs\Python\Python39\Scripts

 

3. 동작 테스트

   - 잘 되었는지 테스트 해보자 ~

 

   - 시작 메뉴에서 `cmd`라고 타이핑을 한 뒤, `명령 프롬프트` 클릭

 

   - 명령어를 넣어보고 그림과 같은 결과가 나오면 성공이다.

> python --version

> pip --version

   - 위 2개 명령어만 잘되면 된다 ^^

 

반응형

 

 

Kubernetes 설치를 해보자 한다.

 

 

Master Node & Worker Node 각 1대씩 구성을 하고자 한다.

 

물리적으로 분리된 BareMetal 구성을 하려고 했지만,

자유로운 설정을 통해 학습해보기 위해서 VirtualBox로 우선 진행해 보았다.

 

 

정말 훌륭한 레퍼런스는 아래 링크와 같다 !!!

  - https://medium.com/finda-tech/overview-8d169b2a54ff

 

 

 

 

1. Master & Worker Node H/W

 

  - Prerequisite

 

구분  CPU Memory Storage 
 Master 2 core 3 GB 30 GB
 Worker 2 core 2 GB 30 GB

 

  - VirtualBox

 

구분  CPU Memory Storage 
 Master 2 core 4 GB 50 GB
 Worker 2 core 4 GB 50 GB

 

    . 네트워크는 NAT가 아니라 Bridge로 잡아줬다. (공유기 환경)

 

 

 

 

 

2. Master & Worker Node S/W

 

  - Ubuntu 20.04 LTS Server 설치를 하면서, 기본적인 환경 설치는 아래 링크와 동일하게 구성하였다.

    . https://www.whatwant.com/entry/notebook-ubuntu-server

 

  - Docker 까지는 미리 설치해두었다. 설치 방법은 아래 링크와 같이 진행하였다.

    . https://www.whatwant.com/entry/Docker-Install-Ubuntu-Server-2004

 

    . kubernetes validated versions이 따로 있으니 이것에 맞추는 것을 추천한다.

 

 

 

 

3. Swap off

 

  - kubelet에서 swap을 지원하지 않기 때문에, Master/Worker 모두 swap 기능을 꺼야 한다.

 

$ sudo swapoff -a

 

  - 영구적으로 기능을 끄기 위해서는 추가 작업도 해줘야 한다.

 

$ sudo nano /etc/fstab

 

  - swap 부분을 찾아서 주석 처리 해주면 된다.

 

#/swap.img  none    swap    sw  0   0

 

 

 

 

4. cgroup driver 설정

 

  - 이미 설치된 docker에 대해서 cgroup driver를 변경해줘야 한다.

 

$ docker info

 

 

  - 지금은 "cgroupfs"로 설정되어 있는 것을 볼 수 있다. "systemd"로 변경해보자.

 

$ sudo nano /etc/docker/daemon.json

 

{

    "exec-opts": ["native.cgroupdriver=systemd"],

    "log-driver": "json-file",

    "log-opts": {

        "max-size": "100m"

    },

    "storage-driver": "overlay2"

}

 

$ sudo mkdir -p /etc/systemd/system/docker.service.d

 

$ sudo systemctl daemon-reload

 

$ sudo systemctl restart docker

 

 

  - "cgroup driver"가 잘 변경된 것을 볼 수 있다.

 

 

 

 

5. Kubernetes 기본 패키지 설치

 

  - Master/Worker Node 모두 [ kubeadm, kubelet, kubectl ] 3개의 패키지가 설치되어야 한다.

    . 부수적으로 [ kubernetes-cni, cri-tools ] 2개 패키지도 필요하다.

 

  - 아래에서 최신 버전의 주소(파일명) 확인 (16.04 이후 버전 모두 동일)

    . https://packages.cloud.google.com/apt/dists/kubernetes-xenial/main/binary-amd64/Packages

 

$ wget https://packages.cloud.google.com/apt/pool/cri-tools_1.13.0-01_amd64_4ff4588f5589826775f4a3bebd95aec5b9fb591ba8fb89a62845ffa8efe8cf22.deb

 

$ wget https://packages.cloud.google.com/apt/pool/kubeadm_1.20.1-00_amd64_7cd8d4021bb251862b755ed9c240091a532b89e6c796d58c3fdea7c9a72b878f.deb

 

$ wget https://packages.cloud.google.com/apt/pool/kubectl_1.20.1-00_amd64_b927311062e6a4610d9ac3bc8560457ab23fbd697a3052c394a1d7cc9e46a17d.deb

 

$ wget https://packages.cloud.google.com/apt/pool/kubelet_1.20.1-00_amd64_560a52294b8b339e0ca8ddbc480218e93ebb01daef0446887803815bcd0c41eb.deb

 

$ wget https://packages.cloud.google.com/apt/pool/kubernetes-cni_0.8.7-00_amd64_ca2303ea0eecadf379c65bad855f9ad7c95c16502c0e7b3d50edcb53403c500f.deb

 

  - 설치도 진행하자

 

$ sudo apt-get install socat conntrack ebtables

 

$ sudo dpkg --install ./kubernetes-cni_0.8.7-00_amd64_ca2303ea0eecadf379c65bad855f9ad7c95c16502c0e7b3d50edcb53403c500f.deb

 

$ sudo dpkg --install ./kubelet_1.20.1-00_amd64_560a52294b8b339e0ca8ddbc480218e93ebb01daef0446887803815bcd0c41eb.deb

 

$ sudo dpkg --install ./cri-tools_1.13.0-01_amd64_4ff4588f5589826775f4a3bebd95aec5b9fb591ba8fb89a62845ffa8efe8cf22.deb

 

$ sudo dpkg --install ./kubectl_1.20.1-00_amd64_b927311062e6a4610d9ac3bc8560457ab23fbd697a3052c394a1d7cc9e46a17d.deb

 

$ sudo dpkg --install ./kubeadm_1.20.1-00_amd64_7cd8d4021bb251862b755ed9c240091a532b89e6c796d58c3fdea7c9a72b878f.deb

 

 

 

 

6. Master Node 셋업

 

  - kubeadm을 이용하여 Master Node 셋업을 진행하자.

 

  - Master Node의 IP를 확인하자

 

$ ifconfig

 

  - 이제 셋업 시작~!! (뒤의 IP는 방금 확인한 IP로 교체!!)

 

$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.100.119

 

❯ sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.100.119

[init] Using Kubernetes version: v1.20.1

[preflight] Running pre-flight checks

[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 20.10.1. Latest validated version: 19.03

[preflight] Pulling images required for setting up a Kubernetes cluster

[preflight] This might take a minute or two, depending on the speed of your internet connection

[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'

[certs] Using certificateDir folder "/etc/kubernetes/pki"

[certs] Generating "ca" certificate and key

[certs] Generating "apiserver" certificate and key

[certs] apiserver serving cert is signed for DNS names [kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local master-stg] and IPs [10.96.0.1 192.168.100.119]

[certs] Generating "apiserver-kubelet-client" certificate and key

[certs] Generating "front-proxy-ca" certificate and key

[certs] Generating "front-proxy-client" certificate and key

[certs] Generating "etcd/ca" certificate and key

[certs] Generating "etcd/server" certificate and key

[certs] etcd/server serving cert is signed for DNS names [localhost master-stg] and IPs [192.168.100.119 127.0.0.1 ::1]

[certs] Generating "etcd/peer" certificate and key

[certs] etcd/peer serving cert is signed for DNS names [localhost master-stg] and IPs [192.168.100.119 127.0.0.1 ::1]

[certs] Generating "etcd/healthcheck-client" certificate and key

[certs] Generating "apiserver-etcd-client" certificate and key

[certs] Generating "sa" key and public key

[kubeconfig] Using kubeconfig folder "/etc/kubernetes"

[kubeconfig] Writing "admin.conf" kubeconfig file

[kubeconfig] Writing "kubelet.conf" kubeconfig file

[kubeconfig] Writing "controller-manager.conf" kubeconfig file

[kubeconfig] Writing "scheduler.conf" kubeconfig file

[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"

[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"

[kubelet-start] Starting the kubelet

[control-plane] Using manifest folder "/etc/kubernetes/manifests"

[control-plane] Creating static Pod manifest for "kube-apiserver"

[control-plane] Creating static Pod manifest for "kube-controller-manager"

[control-plane] Creating static Pod manifest for "kube-scheduler"

[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"

[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s

[apiclient] All control plane components are healthy after 13.002889 seconds

[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace

[kubelet] Creating a ConfigMap "kubelet-config-1.20" in namespace kube-system with the configuration for the kubelets in the cluster

[upload-certs] Skipping phase. Please see --upload-certs

[mark-control-plane] Marking the node master-stg as control-plane by adding the labels "node-role.kubernetes.io/master=''" and "node-role.kubernetes.io/control-plane='' (deprecated)"

[mark-control-plane] Marking the node master-stg as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]

[bootstrap-token] Using token: t4tcwj.22xh9lzstu56qyrb

[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles

[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to get nodes

[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials

[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token

[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster

[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace

[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key

[addons] Applied essential addon: CoreDNS

[addons] Applied essential addon: kube-proxy

 

Your Kubernetes control-plane has initialized successfully!

 

To start using your cluster, you need to run the following as a regular user:

 

  mkdir -p $HOME/.kube

  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

  sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

Alternatively, if you are the root user, you can run:

 

  export KUBECONFIG=/etc/kubernetes/admin.conf

 

You should now deploy a pod network to the cluster.

Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:

  https://kubernetes.io/docs/concepts/cluster-administration/addons/

 

Then you can join any number of worker nodes by running the following on each as root:

 

kubeadm join 192.168.100.119:6443 --token t4tcwj.22xh9lzstu56qyrb \

    --discovery-token-ca-cert-hash sha256:eb3765b58c9140c9a89daf7ea21444ca44a142939ebb93aedad1ebc03202a1d7

 

  - 사용자 계정에서 kubectl 실행을 위해 위의 가이드 내용 그대로 진행을 해보자.

 

$ mkdir -p $HOME/.kube

 

$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

 

$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

  - 잘 설치가 된 것을 확인해보자.

 

$ kubectl get pods --all-namespaces

 

$ kubectl get nodes

 

 

 

  - Pod Network 환경을 맞춰야 하는데, k8s 를 위한 layer 3 환경을 구축해주는 flannel을 사용해보겠다.

    . https://github.com/coreos/flannel/

 

$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

 

 

  - coredns가 pending에서 running으로 바뀌었고, flannel이 추가 되었고, Master Node가 Ready 상태가 된 것을 볼 수 있다.

 

 
 
7. Worker Node 셋업
 
  - 기본 환경 설치를 모두 했다면, 아래 명령어만 실행하면 된다.
  - 아래 명령어는 Master Node 설치할 때 나왔던 가이드 밑에 있는 부분 그대로 하면 된다. (각자의 환경에 따라서 실행할 것!!!)
 
$ sudo kubeadm join 192.168.100.119:6443 --token t4tcwj.22xh9lzstu56qyrb \
    --discovery-token-ca-cert-hash sha256:eb3765b58c9140c9a89daf7ea21444ca44a142939ebb93aedad1ebc03202a1d7
 
❯ sudo kubeadm join 192.168.100.119:6443 --token t4tcwj.22xh9lzstu56qyrb \
    --discovery-token-ca-cert-hash sha256:eb3765b58c9140c9a89daf7ea21444ca44a142939ebb93aedad1ebc03202a1d7
 
[preflight] Running pre-flight checks
[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 20.10.1. Latest validated version: 19.03
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
 
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
 
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
 
  - Master Node에서 잘 붙었는지 확인해보자.
 
$ kubectl get nodes
 

 

 
 
 
 
 
8. hello kubernetes
 
  - Master Node에서 다음과 같이 deployment를 실행해보자.
 
$ kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
 
  - 잘 되었는지 확인도 해보자.
 
$ kubectl get deployments
 
$ kubectl get pods -o wide
 

 

  - Worker Node에서 해당 서비스가 잘 되는지 확인해보자.

 

$ curl http://10.244.1.2:8080

 

 

 

 

 

 

여기까지~

 

 

반응형


Node.js를 사용할 일이 있어서 빠르게 찾아봤다.



Reference: https://github.com/nodesource/distributions/blob/master/README.md#debinstall




1. PPA 등록


    - curl도 싫어하고 ppa 등록하는 것도 싫어하지만...


> curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -




2. nodejs 설치


    - 이제 그냥 설치하면 된다.


❯ sudo apt install -y nodejs




3. Test


    - 잘 되는지 직접 해보자.


> nano ./server.js


var http = require('http');

var os = require('os');


var host = os.hostname();

var handleRequest = function(request, response) {

    console.log('Received request for URL: ' + request.url);

    response.writeHead(200);

    response.end('Server is running on: ' + host);

};


var www = http.createServer(handleRequest);

www.listen(8080);


> nodejs ./server.js


    - 웹브라우저로 살펴보자.




잘 된다!!!



반응형



Minikube를 가지고 놀고 싶은데,

내 PC를 지저분하게 만들기가 싫어서...


최애하는 VirtualBox에 Ubuntu 설치해놓고

그 안에 Minikube를 설치해보고자 한다.



Reference: https://kubernetes.io/ko/docs/tasks/tools/install-minikube/



작업환경

    - Host OS: Windows 10

    - VirtualBox v6.1.12 r139181 (Qt5.6.2)

    - Guest OS: Ubuntu 18.04 Desktop

        . 2 CPU, 8192 Memory




1. 가상화 환경?!


    - "가상화 지원 여부를 확인"하란다. 현재 작업하고 있는 PC가 AMD라서 좀 찝찝한데...

    - VirtualBox의 Guest 환경에서 아래와 같이 "네스티드 VT-x/AMD-V 사용하기(V)"에 체크를 해주었다.




    - 뭔가 나오니까 된 것 같다.


❯ grep -E --color 'vmx|svm' /proc/cpuinfo

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch ssbd vmmcall fsgsbase avx2 clflushopt arat nrip_save flushbyasid decodeassists

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch ssbd vmmcall fsgsbase avx2 clflushopt arat nrip_save flushbyasid decodeassists




2. VirtualBox 설치 ?


    - VirtualBox in VirtualBox ??? 뭔가 이상하지만... 훌륭한 우리 VirtualBox는 이게 된다.


❯ sudo apt install -y virtualbox virtualbox-ext-pack




3. kubectl 설치


    - 제일 먼저 할 것은 현재 최신 버전이 뭔지 확인하는 것이다.


https://storage.googleapis.com/kubernetes-release/release/stable.txt


    - 지금 확인해본 결과는 v1.18.8 이었다.

    - 다운로드 받자. (다운로드 받는 경로나 wget을 사용하는 것은 개인적인 


> cd /srv/install/kubectl


> wget https://storage.googleapis.com/kubernetes-release/release/v1.18.1/bin/linux/amd64/kubectl


    - 설치하자


❯ chmod +x ./kubectl 


❯ sudo cp ./kubectl /usr/local/bin/kubectl


    - 잘 설치되었는지 확인해보자.


❯ kubectl version --client


Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.1", GitCommit:"7879fc12a63337efff607952a323df90cdc7a335", GitTreeState:"clean", BuildDate:"2020-04-08T17:38:50Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}




4. Minikube 설치


    - 다운로드 받아보자


> cd /srv/install/minikube


> wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -O minikube


    - 설치하자


❯ chmod +x ./minikube 


❯ sudo install minikube /usr/local/bin





5. Minikube 실행


    - 실행은 엄청 쉽다


❯ minikube start





6. dashboard


    - minikube는 대시보드도 간단히 제공해준다.


❯ minikube dashboard


🔌  대시보드를 활성화하는 중 ...

🤔  Verifying dashboard health ...

🚀  프록시를 시작하는 중 ...

🤔  Verifying proxy health ...

🎉  Opening http://127.0.0.1:40647/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...

[7090:7090:0822/025314.671219:ERROR:viz_main_impl.cc(150)] Exiting GPU process due to errors during initialization


    - 알아서 Chrome이 뜬다. (아! 개인적인 취향으로 VirtualBox에 Ubuntu 설치하자마자 Chrome을 미리 설치해놨다)





7. docker 설치


    - minikube를 가지고 놀기 위해서는 docker가 필요하다.


❯ sudo apt install -y docker.io


    - 현재 사용자 계정으로 docker를 실행할 수 있도록 하자


❯ sudo usermod -aG docker $USER


❯ newgrp docker


    - 현재 계정을 docker 그룹에 넣어도 바로 적용되지 않는다. 재부팅하기 귀찮아서 newgrp으로 지금 docker 그룹에 속한 것처럼 해버렸다.


    - 잘 설치되었는지 실행해보자. Permission 에러가 안나오면 된다.


❯ docker ps -a


CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES



가지고 노는 것은 다음 기회에~

반응형

꾸준히 업데이트를 해주고 있는 아름다운 Redmine이 2013.03.19 날짜에 2.3.0 버전과 2.2.4 버전을 배포했다.

기존 install 포스팅으로도 설치에 큰 이슈가 없을 것 같기는 하지만,
그래도 오랜만에 다시 한 번 천천히 설치 과정을 진행해보려고 한다.


01. 버전 호환성 확인하기

   - 정말 다시 한 번 말하지만, Ruby 대중화의 가장 큰 적은 버전 호환성이다 !!!

 Redmine  Supported Ruby  Required Rails  Supported Rack  Supported RubyGems
 2.3.0  ruby 1.8.7, 1.9.2, 1.9.3, 2.0.0
jruby-1.7.2
 Rails 3.2.13  ?  RubyGems <= 1.8
 2.2.4  ruby 1.8.7, 1.9.2, 1.9.3,
jruby-1.6.7
 Rails 3.2.13  ?  RubyGems <= 1.8



02. 기본 패키지 설치

   - Ruby, Redmine 설치를 위해 사전에 필요한 패키지들을 모두 설치하자.

$ sudo apt-get install build-essential libpcre3-dev libruby libssl-dev libcurl4-openssl-dev libpq-dev libreadline-dev libjpeg62-dev libpng12-dev curl openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev autoconf libc6-dev libncurses5-dev automake libtool bison pkg-config



03. Ruby 설치

   - Ruby 설치를 위해서는 rvm을 활용해야 한다. (여기에서 root 로 변경 후 뒤에 계속 root로....)

$ sudo su -
$ curl -L https://get.rvm.io | sudo bash -s stable
$ source /etc/profile
$ rvm install 1.9.3
$ rvm use 1.9.3
$ rvm --default use 1.9.3 

   - 이렇게 한 뒤 [ rvm -v ] 명령을 통해 ruby 버전이 확인되면 성공한 것이다.
   - 마지막으로 PATH 설정을 추가로 해주어야 하는데, sudo의 PATH 문제로 인해서 조금 더 해줘야 할 것이 있다.

$ nano /etc/environment


PATH="......:/usr/local/rvm/bin"




04. Rails 설치

   - rails를 설치하자.

$ gem install rdoc
$ gem install rails -v 3.2.13
 


05. PostgreSQL 설치 및 설정

     - 개인적 취향이지만 객관적으로도 꽤 괜찮은 database를 설치하자.
     - 그리고 나서 사용할 계정과 데이터베이스를 만들자.

$ apt-get install postgresql

$ su - postgres
$ psql

# CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'my_password' NOINHERIT VALID UNTIL 'infinity';
# CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
# \q

$ exit
$ gem install pg



06. ImageMagick

     - rmagick 설치하기

$ apt-get install librmagick-ruby libmagickwand-dev
$ gem install rmagick




07. Redmine

     - 압축파일로 다운로드 받자.

$ cd /srv/install/
$ wget http://rubyforge.org/frs/download.php/76867/redmine-2.3.0.tar.gz
$ tar zxvf  redmine-2.3.0.tar.gz



08. bundler & install

     - 필요한 패키지들을 한 번에 받을 수 있는 놈이 있다.

$ cd redmine-2.3.0
$ gem install bundler

reboot

$ sudo su -
$ cd /srv/install/redmine-2.3.0
$ bundle install --without development test mysql sqlite



09. Apache2 설치

$ apt-get install apache2 apache2-prefork-dev




10. passenger 설치

$ gem install passenger
$ cd /usr/local/rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19/
./bin/passenger-install-apache2-module

     - Passenger 모듈을 Apache2에 올리기 위해서는 화면에 나오는 값을 잘 봐야 한다.

$ nano /etc/apache2/mods-available/passenger.conf

<IfModule mod_passenger.c>
   PassengerUser www-data
   PassengerDefaultUser www-data

   PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19
   PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p392/ruby
</IfModule>

$ nano /etc/apache2/mods-available/passenger.load

LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19/ext/apache2/mod_passenger.so


$ cd /etc/apache2/mods-enabled
ln -s ../mods-available/passenger.conf ./passenger.conf
ln -s ../mods-available/passenger.load ./passenger.load



11. database 설정값 등록

$ cd /srv/install/redmine-2.3.0
$ nano ./config/database.yml

 

production:
        adapter: postgresql
        database: redmine
        host: localhost
        username: redmine
        password: redmine
        encoding: utf8
        schema_search_path: public


     - 주의 사항으로는 위의 파일 내용을 입력할 때에 Tab 말고 White-Space로 입력해야 한다.



12. 추가 작업

$ rake generate_secret_token
$ RAILS_ENV=production rake db:migrate
$ RAILS_ENV=production rake redmine:load_default_data
   → Select language [ko]
$ mkdir public/plugin_assets


   - 권한 설정이 중요하다 !

$ chown -R www-data:www-data files log tmp public
$ chmod -R 755 files log tmp public/plugin_assets
$ chown -R www-data:www-data ./config/database.yml
$ chmod 600 ./config/database.yml



 

13. 웹설정

$ cd /var/www/
$ ln -s /srv/install/redmine-2.3.0/public ./redmine

$ nano /etc/apache2/sites-available/default


<Directory /var/www/redmine>

        RailsBaseURI /redmine
        RackEnv production
        RailsEnv production
        PassengerResolveSymlinksInDocumentRoot on

</Directory>


$ service apache2 restart


여기까지 진행하고 웹브라우저로 http://127.0.0.1/redmine에 접속을 하면 Redmine을 볼 수 있다.

초기 관리자는 admin/admin 이다.
반응형
  1. BlogIcon 상오기 2013.05.10 10:55

    안녕하세요 ^^

    구버전을 사용하다 2.3으로 업데이트하면서 블로그 글을 보면서 많은 도움을 받았는데 궁금한게 있어 문의 댓글 남깁니다.

    현재 윈도우XP에 2.3 버전으로 업데이트하여(기존 0.9 였나?) 사용중에 있는데 2가지 문제가 해결이 안되네요.

    1. 2.3 버전으로 업데이트후 레드마인에서 이슈 등록이나 수정등을 할때 입력 버튼을 누르면 완료되기까지 한참이 걸립니다.
    대략 10~20초 정도?
    업데이트전인 기존 버전에선 바로 등록이 되었는데 큰 차이가 날 정도로 느려졌습니다 ㅜㅜ

    2. PNG 내보내기시 internal error이 발생하는데 아무리 검색해봐도 이전 버전에서 해결되었다라는 것만 보이네요.
    폰트 문제인가 싶어 환경 설정 파일에서 폰트 경로는 추가를 한 상태 입니다.
    설정 정보에서 "RMagick 사용 가능 (선택적)" 이라고 체크되어 있고 내보내기에 PNG가 표시되는걸 보면 프로그램 설치는 정상적인것 같은데 에러나는 이유를 모르겠네요.

    짐작가는게 있으시면 조언 부탁 드립니다.

    감사 합니다 ^^

    • BlogIcon whatwant 2013.05.16 00:32 신고

      안녕하세요.

      1. 웹 동작과 관련해서는 [ log/production.log ] 파일을 살펴보시길 권장합니다. 제가 이슈 새로 생성해본 내용은 아래와 같네요.

      Started GET "/redmine/projects/test/issues/new" for 10.0.2.2 at 2013-05-16 00:26:29 +0900
      Processing by IssuesController#new as HTML
      Parameters: {"project_id"=>"test"}
      Current user: admin (id=1)
      Rendered issues/_form_custom_fields.html.erb (11.0ms)
      Rendered issues/_attributes.html.erb (26.7ms)
      Rendered issues/_form.html.erb (46.1ms)
      Rendered attachments/_form.html.erb (5.3ms)
      Rendered issues/new.html.erb within layouts/base (59.4ms)
      Rendered plugins/redmine_banner/app/views/banner/_project_body_bottom.html.erb (2.2ms)
      Completed 200 OK in 189ms (Views: 67.5ms | ActiveRecord: 25.8ms)
      Started POST "/redmine/projects/test/issues" for 10.0.2.2 at 2013-05-16 00:27:21 +0900
      Processing by IssuesController#create as HTML
      Parameters: {"utf8"=>"✓", "authenticity_token"=>"rhb1F6cW4HMS2nO/U1FqbBNbbJJSOKLSZ+znmzRs2ak=", "issue"=>{"is_p$
      Current user: admin (id=1)
      Rendered mailer/_issue.text.erb (1.3ms)
      Rendered mailer/issue_add.text.erb within layouts/mailer (3.8ms)
      Rendered mailer/_issue.html.erb (65.8ms)
      Rendered mailer/issue_add.html.erb within layouts/mailer (68.0ms)
      Redirected to http://127.0.0.1/redmine/issues/1
      Completed 302 Found in 296ms (ActiveRecord: 40.7ms)


      2. PNG로 내보내는 것 역시 마찬가지로 log 파일을 확인해보시기 바랍니다. 한글 출력에 문제가 있는 것 말고는 전 잘되네요.

      Started GET "/redmine/projects/test/issues/gantt.png?month=5&months=6&year=2013&zoom=2" for 10.0.2.2 at 2013-05-1$
      Processing by GanttsController#show as PNG
      Parameters: {"month"=>"5", "months"=>"6", "year"=>"2013", "zoom"=>"2", "project_id"=>"test"}
      Current user: admin (id=1)
      Rendered text template (0.0ms)
      Sent data test-gantt.png (3.8ms)
      Completed 200 OK in 307ms (Views: 3.6ms | ActiveRecord: 15.9ms)


      log 파일 내용을 한 번 알려줘보시면 저도 한 번 살펴보도록 하겠습니다.

  2. redmine 2013.05.14 18:44

    안녕하세요.

    레드마인 설치가 쉽지 않았는데 블로그 보고 아주 쉽게 설치를 하였습니다. 감사합니다.

    근데 설치 후, error.log를 보니 아래와 같이 로그가 남았는데, error 로그다 보니 신경이 쓰이네요.
    구글링을 엄청하였지만 답을 못찾고 있어 망설이다가 여기에 글 남겨요.
    혹시 조언해주실 부분이 있으시면 부탁드립니다.

    감사합니다.!!

    [Tue May 14 18:23:01 2013] [notice] Apache/2.2.22 (Ubuntu) configured -- resuming normal operations
    [Tue May 14 18:34:15 2013] [notice] caught SIGTERM, shutting down
    [ 2013-05-14 18:34:16.4846 9322/7f567850b740 agents/HelperAgent/Main.cpp:554 ]: PassengerHelperAgent online, listening at unix:/tmp/passenger.1.0.9318/generation-0/request.socket
    [ 2013-05-14 18:34:16.6954 9329/7f7f57e53740 agents/LoggingAgent/Main.cpp:272 ]: PassengerLoggingAgent online, listening at unix:/tmp/passenger.1.0.9318/generation-0/logging.socket
    [ 2013-05-14 18:34:16.7522 9346/7fb5c9301740 agents/HelperAgent/Main.cpp:554 ]: PassengerHelperAgent online, listening at unix:/tmp/passenger.1.0.9338/generation-0/request.socket
    [ 2013-05-14 18:34:16.7710 9353/7f6aa2569740 agents/LoggingAgent/Main.cpp:272 ]: PassengerLoggingAgent online, listening at unix:/tmp/passenger.1.0.9338/generation-0/logging.socket
    [Tue May 14 18:34:16 2013] [notice] Apache/2.2.22 (Ubuntu) Phusion_Passenger/4.0.2 configured -- resuming normal operations
    [Tue May 14 18:34:46 2013] [notice] caught SIGTERM, shutting down
    [ 2013-05-14 18:34:47.6388 9631/7fc03ce54740 agents/HelperAgent/Main.cpp:554 ]: PassengerHelperAgent online, listening at unix:/tmp/passenger.1.0.9627/generation-0/request.socket
    [ 2013-05-14 18:34:47.6506 9638/7fef48fb8740 agents/LoggingAgent/Main.cpp:272 ]: PassengerLoggingAgent online, listening at unix:/tmp/passenger.1.0.9627/generation-0/logging.socket
    [ 2013-05-14 18:34:47.7057 9655/7f664ec55740 agents/HelperAgent/Main.cpp:554 ]: PassengerHelperAgent online, listening at unix:/tmp/passenger.1.0.9647/generation-0/request.socket
    [ 2013-05-14 18:34:47.7247 9662/7f06b9b41740 agents/LoggingAgent/Main.cpp:272 ]: PassengerLoggingAgent online, listening at unix:/tmp/passenger.1.0.9647/generation-0/logging.socket
    [Tue May 14 18:34:47 2013] [notice] Apache/2.2.22 (Ubuntu) Phusion_Passenger/4.0.2 configured -- resuming normal operations
    [ 2013-05-14 18:34:56.2102 9655/7f664eb5e700 Pool2/Spawner.h:739 ]: [App 9743 stdout]
    [ 2013-05-14 18:34:58.0758 9655/7f664eb1d700 Pool2/Spawner.h:159 ]: [App 9743 stderr] /srv/install/redmine-2.3.0/lib/SVG/Graph/Graph.rb:3: warning: class variable access from toplevel
    [ 2013-05-14 18:34:59.2448 9655/7f664eb5e700 Pool2/SmartSpawner.h:300 ]: Preloader for /srv/install/redmine-2.3.0 started on PID 9743, listening on unix:/tmp/passenger.1.0.9647/generation-0/backends/preloader.9743

    • BlogIcon whatwant 2013.05.16 01:18 신고

      안녕하세요.

      에러라는 것이 언제나 그렇지만, 재연이 안되는 것은 답변 드리기가 조금 어렵네요.
      제 환경에서 error.log 파일 내용을 보면 아래와 같습니다.

      [Thu May 16 00:57:48 2013] [notice] mod_python: Creating 8 session mutexes based on 6 max processes and 25 max threads.
      [Thu May 16 00:57:48 2013] [notice] mod_python: using mutex_directory /tmp
      [Thu May 16 00:57:48 2013] [notice] Apache/2.2.20 (Ubuntu) Phusion_Passenger/3.0.19 mod_python/3.3.1 Python/2.7.2+ configured -- resuming normal operations

      그런데, redmine님이 남긴 로그를 보면 조금 이상하긴 하네요.

      Passenger 버전을 강제로 다운시켜보시면 어떨까 싶기는 하는데,
      그 문제로 인한 것인지 확신은 없습니다.

      제 환경에서 재연을 시켜볼 수 있는 힌트를 좀 주시면 더 확인해보도록 하겠습니다.

      좋은 하루 되세요~

    • BlogIcon 상오기™ 2013.05.17 17:00 신고

      안녕하세요 ^^

      1번 문제는 이메일 설정이 잘못되어 발생한 문제였던것 같습니다.
      메일이 정상적으로 동작하니 딜레이 시간도 없어졌네요 ^^

      2번 문제는 더 확인해보고 댓글 남기도록 하겠습니다.

      감사 합니다.

    • BlogIcon whatwant 2013.05.17 22:59 신고

      아... 그러고보니 그럴 수도 있겠군요 !!!

      확인된 결과까지 알려주셔서 너무 너무 감사합니다 !!!!!


Git의 기본적인 계정(권한) 관리는 SSH를 따라간다고 앞에서 지겹게 언급했다.

SSH가 훌륭한 놈이라는 것은 분명하지만,
계정 관리에 있어서 부족함이 있는 것 또한 분명하다.

Git에 있어서도 다양하고 디테일한 권한 설정 등이 필요한데,
이 부분을 SSH는 충분히 채워주지 못하고 있다.

그래서, Git을 위한 계정(권한) 관리 도구들이 계속 나타나고 있다.

과거에는 Gitosis 라는 것을 주로 사용했으나 기능이나 사용상의 편의성에 있어서 부족함이 보여서
새로운 Gitolite 라는 것이 나타났고, 최근에는 거의 대부분 Gitolite를 사용하고 있다.

사실 일반적인 경우 Gitosis만 가지고도 대부분 처리가 가능하나,
왠지 더 최근의 보다 더 막강한 Gitolite를 적용하곤 하는 것도 없지 않아 있는 것 같다.
물론 나의 경우에도 마찬가지다! 최신병에 걸린 죄로.... Gitolite에 대해서 연구를 해보겠다!!!




Gitolite를 설치하는 방법은 당연하게도 패키지 설치와 소스 설치가 있고...
여기에서는 소스를 가지고 설치하는 과정으로 설명을 할 것이다.


[ 전면수정 ]
   - 내가 바보같아서인지, 이 놈의 Gitolite에 대해서 친절하게 설명해 놓은 자료가 안보인다.
   - 가끔 친절한척 자세히 적어놓은 것들이 있지만, 따라하다보면 대체 뭘하는 것인지 모르겠는 그런 것이 대부분이다.
   - 더더욱 힘들게 하는 것은 Gitolite가 최근 g2 버전에서 g3로 바뀌면서 설치 과정들이 바뀌었다.
   - 그래서 예전 기억을 더듬어 차근차근 포스팅을 해나가다가... 좌절! 결국 대폭 수정 작업!!! 짜증 확!!! ㅠㅠ




1. Gitolite


     - Gitolite 프로젝트의 홈페이지는 아래와 같다.
          ▷ https://github.com/sitaramc/gitolite
     - 설치 과정에 대한 매뉴얼은 아래와 같다.
          ▷ http://sitaramc.github.com/gitolite/install.html
     - 계정 관리 등에 대해서 요약(?)을 한글로 보고 싶다면 아래 주소로 가라.
          ▷ https://github.com/progit/progit/blob/master/ko/04-git-server/01-chapter4.markdown



2. 시스템(계정) 구성

     - Gitolite를 설치하는 환경을 위해 어떻게 구성해야하는지 살펴보자.


     - 꼭 위와 같이 구성해야하는 것은 절대 아니다.
     - 아래 설명하는 내용을 잘 읽어보고 어떻게 구성해야하는지 각자 결정하면 된다.

     - 위의 직사각형은 각 계정을 의미한다.
     - [ git-repo ] 계정은 Git repository를 운영하기 위한 계정이다.
     - [ gitolite ] 계정은 Gitolite를 관리하기 위한 관리자 계정이다.
     - [ user ] 계정은 그냥 여러분이 사용하는 Ubuntu의 기본 계정이다.

     - 위 그림에 대한 설명은 아래 내용들을 하나씩 따라하면 알 수 있을 것이다.



3. 계정 생성

     - SSH 환경에서 여러 개발자들을 지원해주기 위해서는 Linux 계정을 그 숫자만큼 만들어줘야 했다.
     - Gitolite를 적용하게 되면 Linux 계정을 만들어주지 않고도 Git 계정을 만들어 줄 수 있다.
     - 대표 계정 하나로 나머지를 모두 커버하는 것이다.


$ sudo adduser gitolite
$ sudo adduser git-repo

     - [ gitolite, git-repo ]라는 계정을 추가해주자.



4. Public Key 등록

     - 현재 작업중인 계정에서 다른 계정에 접근하기 위해 Public-Key를 등록해주자.


     - 지금 사용중인 user의 계정에서 gitolite, git-repo 계정으로 ssh 접근을 바로(패스워드 없이) 하기 위해서
       user 계정의 공개키를 넣어주는 것이다.


$ ssh-keygen
$ ls -al ~/.ssh/

     - [ ~/.ssh/ ] 계정의 홈디렉토리 밑에 있는 '.ssh/' 디렉토리 밑의 파일들을 우선 확인하고,
     - [ id_rsa ], [ id_rsa.pub ] 파일들이 안보이면 [ ssh-keygen ]으로 생성을 해주면 된다.

 

$ ssh-copy-id -i ~/.ssh/id_rsa.pub gitolite@localhost
$ ssh-copy-id -i ~/.ssh/id_rsa.pub git-repo@localhost


     - 지금 현재 계정의 공개키를 gitolite, git-repo 계정에 넣어주기 위한 명령이다.


     - 잘 되었는지 검증해보기 위해서는 아래와 같이 직접 ssh 접속을 해보면 안다.

     - 암호를 묻는 과정이 사라졌다.
     - gitolite 계정의 [ ~/.ssh/ ] 경로를 살펴보면 [ authorized_keys ] 파일이 보일 것이다!



5. Gitolite 다운로드 받기

     - 위와같이 계정들을 생성하고 준비를 하고...이제 Gitolite를 설치해보자.
     - 그런데, 어디에 Gitolite를 설치해야할까?!

     - 정답은 repository를 저장할 곳이다! 즉, [ git-repo ] 계정에서 설치를 해야하는 것이다.

 


     - [ git-repo ] 계정에서 Gitolite를 다운로드 받고 설치하면 된다.
 



     - 위 사이트에서 경로를 확인하고... 진행을 계속 해보자.



   - [ git-repo ] 계정으로 작업을 하기 위해서 해당 계정으로 접속한다.
   - [ git-repo ]의 홈디렉토리에서 Gitolite를 clone하면 된다.

   - 그런데, 여기에서 중요한 점을 하나 집고 넘어가야 한다.
   - 웹에서 검색이 되는 Gitolite의 설치가이드 대부분과 지금 현재 상황이 맞지 않는다는 점이다.
   - 그 이유는 버전이 틀리다!!! 기존 Gitolite 대부분은 "g2" 버전이고, 지금은 "g3"다.
   - 그래서 설치 스크립트가 틀리다.
   - 2012.04.17에 g3가 릴리스가 되어서인지, 이와 관련한 자료는 거의 없다.



6. install

     - 다운로드 받은 Gitolite를 설치해보자.


$ ./gitolite/install

     - 그냥 'install'만 실행하면 일단 끝이다.

     - 만약 다른 디렉토리에 설치하고 싶으면 [ ./gitolite/install -to /srv/install/gitolite ]와 같이 사용한다.
     - 여기에서 설치하는 것은 실행할 수 있는 binary들이다.

     - 이제 이어서 'setup'을 해야하는데, 관리자 계정의 공개키가 필요하다.
     - 앞에서 만든 계정 중에서 우리는 [ gitolite ]라는 이름으로 관리자 계정을 만들어 놓았다.


$ ssh gitolite@localhost
$ ssh-keygen

     - 여기서 생성한 공개키를 전송해야한다.



     - [ gitolite ]의 공개키를 [ git-repo ] 계정 어딘가로 전송을 하고자 한다.

     - 위의 경우 ~/.ssh/ 밑에 위치했는데, 꼭 그곳이 아니어도 된다.
     - 관리자로 사용할 계정의 공개키가 Gitolite 설치과정에서 필요로 해서 이렇게 하는 것이다.


$ ./gitolite/src/gitolite setup -pk ./.ssh/gitolite.pub

     - install 후에 사용할 수 있게 된 [ ./gitolite/src/gitolite ] 명령어를 이용하여 setup을 하는데,
     - [ gitolite ] 계정의 공개키를 관리자로 등록하는 것이다.

     - Gitolite는 하나의 repository로 관리를 하게 된다. 위 화면에서 보는 바와 같이 [ gitolite-admin.git ]이 그것이다.
     - 해당 repository에 자료를 넣을 수 있는 관리자는 방금 전에 등록한 공개키로 인하여 [ gitolite ] 계정이다.

     - 친절하게도 테스트 해볼 수 있게 [ testing.git ] repository도 제공을 해준다.



7. clone

     - [ gitolite-admin.git ] repository를 clone 받아서 확인을 해보도록 하겠다.


$ ssh gitolite@localhost
$ mkdir repositories

     - Gitolite에 관리자로 등록시킨 [ gitolite ] 계정으로 접속하자.
     - clone 받을 디렉토리도 'repositories'라는 이름으로 만들어두자.

▶ 여기에서 Gitolite를 처음 접하는 분들을 위한 질문~!!!!!!!
     - 위와 같이 만든 [ Gitolite를 적용한 Git ]에 어떻게 접근을 할까?!

▷ 정답은 대표 계정 1개로 접근을 한다!
     - 이 포스팅 내용대로라면 여기에서는 [ git-repo ] 계정


     - [ gitolite ] 계정이 [ git-repo ] 계정에 접근을 하려고 하면,
     - 'gitolite' 계정의 private key에 대응하는 public key를 찾는데,
     - [ Gitolite ]가 이 부분에 개입을 해서 등록된 public key를 기반으로 권한을 확인하고
     - repository에 대한 접근 권한을 조정한다.

     - 이 부분에 대해서 오랫동안 고민해보질 못해서인지 쉽게 설명은 안되는데, 위의 글과 그림을 잘 봐보면....^^

     - 일단, clone을 해보자.


$ cd ~/repositories
$ git clone git-repo@localhost:gitolite-admin.git


     - 지금 현재 사용자 계정은 [ gitolite ]이다.
     - Gitolite에 관리자로 public key를 등록한 계정도 [ gitolite ]이다.
     - 그런데, clone을 할 때 [ git-repo ] 계정으로 접근을 했다. 응?!

     - 위에서 말한바와 같이, Gitolite를 사용할 때에는 무조건 대표 계정을 사용한다.

     - 그러면, 다른 계정에서 똑같이 하면 어떻게 될까?


     - Gitolite에 별도로 계정 등록을 하지 않은 사용자 chani 계정에서 접근을 할 때인데... 당연히 접속 불가~!!!


     - [ chani ] 계정이 'git-repo' 계정으로 접근을 하지만,
     - Gitolite가 등록된 공개키를 확인을 하는데 등록된 것이 없기에 접근을 거부하게 된다.




이번 포스팅을 하면서 너무 오랜 시간이 걸렸고, (헷갈리기도 하고 주말에 열심히 놀기도 하고 사고도 있고.....)
포스팅 내용 자체도 너무 길어지는 관계로 여기까지만해서 설치에 대해서 마무리!!!

계정 관리하는 것이나, admin 환경 설정하는 것이나 그러한 것들은 다음 포스팅으로.......


아자~!!! 오늘 두산 이겼다.... 그런데, 좀 부끄럽게 이겼다.... 프로들이 어이없는 실수들을 서로 남발하는....ㅋㅋㅋ

반응형
  1. sang0164 2012.05.19 02:18

    감사히 잘보고 인스톨했습니다 ...ㅠㅠ
    몇일간 고생하다가 겨우 설치완료 했네요.. 정말 감사합니다! ^^
    다음 포스팅도 얼른 부탁드리겠습니다 + +

    • BlogIcon whatwant 2012.05.19 02:24 신고

      Gitolite 관련하여 자료가 많이 없어서 저도 고생을 많이 했었어요 ^^
      도움이 되었다니 저도 기분이 좋네요 ^^

    • sang0164 2012.05.19 02:50

      지금까지 각종 문서들 보면서 따라하면 항상 어디선가 문제가 생겼었는데 ...
      써주신대로만 따라하니 깔끔하게 설치가 되었습니다!
      저에겐 정말 큰 도움이 되었어요 감사합니다. ^-^

      아, 그리고 혹시 다른 파티션이나 드라이브에 저장소를 두도록 셋팅이 가능한가요 ??

    • BlogIcon whatwant 2012.05.19 21:19 신고

      repositories를 변경하고 싶으시다는 것이시죠!?

      오늘 포스팅 내용에 포함해볼께요~^^

  2. BlogIcon gandax 2012.07.03 17:25

    포스팅 감사히 잘 봤습니다 ^^
    코드리뷰 + 권한 관리를 위하여 Gerrit을 사용하기는 했었는데 Gitolite 는 처음 접해보네요..
    포스팅을 쭉~ 읽어봤는데 제가 기존에 사용하던 방식이랑은 많이 달라서 이해가 잘 되지 않는 부분도 있네요..
    시간을 두고 실습 해보면서 자세히 정독 해야할 것 같습니다.
    포스팅 감사합니다 ^^

    • BlogIcon whatwant 2012.07.05 23:36 신고

      요즘 Gerrit 때문에 속썩이고 있는데,
      Gerrit을 사용하고 계시다니... 존경스럽습니다.

      이 놈의 Gerrit은 정리된 좋은 자료가 정말 없더군요.

      앞으로 좋은 조언 많이 주시고,
      댓글도 많이 달아주세요~!!! 반갑습니다~!!!

    • BlogIcon gandax 2012.07.06 14:40

      무슨 버전을 테스트 중이신가요?
      필요하시다면 주말을 이용하여, Gerrit 설치 와 관련해 포스팅 하도록 하겠습니다.

    • BlogIcon whatwant 2012.07.06 20:13 신고

      헛~!!!

      2.4.1 버전으로 하고 있었는데, 얼마전 또 2.4.2 버전이 나왔더군요 ^^

      Ubuntu 환경에서

      Apache에서 80번이 아닌 다른 포트로해서 구동을 해보려 하고 있습니다.

      그리고 Logout이 잘 동작하게 하고 싶은데, 뭔가 설정을 해도 말을 잘 안듣더군요 ㅠㅠ

  3. 희민 2012.09.18 11:33

    정말 큰 도움이 되었습니다. 알기 쉽게 정리가 잘 된 것 같아요. 다만 chani 계정의 공개키를 git-repo 계정에 추가한 부분 때문에 chani 계정에서 clone 에러가 발생하여 조금 어려움을 겪었습니다. 사실 어떻게 보면 ssh-copy-id 부분은 굳이 필요한 부분은 아닌거죠?? 아무튼 좋은 글 감사합니다!!

    • BlogIcon whatwant 2012.09.18 22:59 신고

      도움이 되셨다니 너무 기분이 좋습니다 ^^

      ssh-copy-id 부분은 gitolite하고 밀접한 부분은 아닙니다 ^^
      그냥 SSH public-key를 등록하는데 도움을 줄 뿐입니다!

  4. ㅁㄴㅇㄴㅁ 2013.01.11 21:53

    ssh 키를 gitolite 복사하면 패스워드를 요구하는데 어떻게 하는건지 궁금합니다

  5. ㅁㄴㅇㄴㅁ 2013.01.12 21:40

    계속 계정 패스워드 요구합니다

    • BlogIcon whatwant 2013.01.13 20:53 신고

      죄송합니다만,
      ㅁㄴㅇㄴㅁ님이 어떻게 진행하신 상황인지
      조금만 더 정확히 설명을 해주시면 그에 맞는 답변을 찾아보도록 하겠습니다.

  6. Richard 2013.02.04 15:56

    좋은 자료 잘 보았습니다.
    고맙습니다. ^^

  7. BlogIcon Reid 2013.02.27 19:02

    이렇게 쉽게 설명하기도 쉽지 않은데 대단하세요!
    고맙습니다. :-)

    • BlogIcon whatwant 2013.02.27 21:23 신고

      와우~ 이런 칭찬이야 말로 정말 고맙습니다~!!

      Reid님의 칭찬으로 얻은 힘을 가지고 오늘 포스팅 하나 해야겠는데요!!

  8. ch 2013.03.05 15:50

    감사합니다.
    도움이 정말 많이 되었습니다.

    조금 어렵기도 하구요. ^^ 제가 이해를 못해서였겠지요..

    • BlogIcon whatwant 2013.03.05 20:05 신고

      제가 지금도 지식이 짧지만,
      위 포스팅을 할 때엔 더더욱 부족한 지식에 작성을 해서
      제대로 설명을 드리지 못한 부분도 많은 것 같습니다.

      나중에 기회가 되면 다시 한 번 업데이트 하도록 하겠습니다.

      다시 한 번 댓글 남겨주셔서 감사드립니다 !!!

  9. BlogIcon 심량 2015.07.06 16:27 신고

    안녕하세요! 이해가 될 듯 말 듯한 부분이 있어서 질문을 드립니다.
    위 예제에서 chani 계정으로 접근이 안되잖아요?
    gitolite 계정으로 로그인해서 conf/gitolite.conf에 chani 추가해주고 keydir에 chani.pub 추가한 다음 commit/push 하고 다시 chani 계정에서 위 clone 시도를 다시 하면 그 때는 되는 건가요?

  10. 익명 2016.03.20 15:57

    git clone git-repo@localhost:gitolite-admin.git 여기서 막히신분들
    git clone git-repo@localhost:repositories/gitolite-admin.git 이렇게 해보세요

  11. Git초심자 2017.11.18 19:13

    안녕하세요. 정말 대단히 유용한 자료를 만들어 주셔 감사합니다(__)..
    덕분에 Git을 써봅니다.
    중간에 반응들이 다른 결과가 좀 있었진만 어쨋든 잘 흘러가고 있습니다.
    계속 정주행 하며 정독하겠습니다.
    감사합니다~

  12. 초보자 2018.04.11 22:03

    Git을 처음 사용하는데 제가 찾던 자료가 여기 있었네요.
    많은 도움이 되었습니다. ^^
    감사합니다.

+ Recent posts