재미있는 이미지와 폰트로 호기심을 확 잡아 끌었던 책을 이번 기회에 보게 되어 너무 좋았다.


같은 부서에 있는 신입 사원의 책상 위에 있던 이 책을 보면서 재미있겠다라고 생각만 하다가

드디어 책을 받아서 보는데... 기존에 봤던 표지와 조금 달라서 이상하다 여겨졌는데,

이번에 받은 책은 "개정판"이란다.



이제 한 달 조금 넘은 따끈따끈한 책이다 !!!


IT 도서 중에서 그림으로 쉽게 설명한 책들을 보면 일본에서 만들어진 책들이 많았는데,

역시나 이 책도 지은이를 보니 made in japan 이었다.



여러 명이 각각의 챕터를 쓰고 그것을 엮어서 만들어졌다.

지은이들 간의 기본적인 인맥은 '일본 오라클'에서 같이 일했던 동료 사이인 것으로 보인다.



옮긴이의 이력을 보면... 네덜란드, 일본, SK, 싱가포르... 부럽다. 나도 글로벌하고 싶은데... ^^



이 책에서 설명해주고 있는 전체 아키텍처에 대한 그림이다. (http://bit.ly/2J6lH22)

일반적인 웹서비스에서 필요로 하는 서버 구성(Front-end, Back-end, DB)을 기본으로 설명을 해주고 있다.



단순한 서버 HW에 대한 설명에서 그치는 것이 아니라

이러한 인프라를 운영할 때 알아야 할 다양한 요소에 대해서도 알차게 설명을 해준다.



내가 있는 팀에 신입 사원이 온다고 하면

여기 이 책에 있는 내용들을 최소한 한 번 즈음 읽고,

내용을 자세히 알지는 못한다고 하여도 대략적인 전체적인 흐름은 익히고 왔으면 좋겠다.



위에 써 있는 내용들을 보면서 대강이라도 어떤 말인지 이해할 수 있는 수준이면 좋겠다.


신입 개발자들에게만 추천하고픈 책은 아니다.

나름 이 바닥에서 적지 않은 기간 동안 일하고 있는 나에게도 많은 도움이 되는 책이다.


주로 어떤 상황에 접하게 되어 주먹구구식으로 알게 된 내용들을 체계적으로 살펴보고 익히기에 정말 괜찮은 책인 것 같다.

말 그대로 어설프게 또는 잘못 알고 있었던 내용들을 바로 잡을 수 있는 좋은 교재이기도 한 것 같다.


"IT에 종사하는 사람이라면 반드시 읽어야 할 책!

 IT 인프라 전반에 대한 상식을 그림으로 쉽게 이해한다!"


책에도 쓰여져 있는 문구이지만, 정말 말 그대로 "IT 상식"을 알려주는 기본서라는 느낌이다.


지금 부서에 있는 신입 사원에게도 꼭 개정판으로 읽어보도록 추천할 것이고,

앞으로 오게 될 신입 개발자에게는 이 책을 공부해서 세미나 발표하도록 시킬 작정이다.



다만, 몇 가지 아쉬운 점도 있었다.


최근 IT 인프라 관련하여 주 트렌드가 되고 있는 가상화나 클라우드에 관련된 내용들도 있으면 좋겠는데

가상화에 대한 내용이 없는 것은 아니지만, 고작 6페이지 분량밖에 없었고,

클라우드와 관련된 사항은 다른 것들을 설명하면서 언급되는 정도이다.

클라우드 환경을 중심으로 하는 서버 구성이나 네트워크, 인증 등에 대한 내용으로 2권이 나왔으면 좋겠다.


그리고,

이왕 그림으로 공부하는 책인데... 그림이 좀 더 colorful 했으면 더더욱 좋지 않았을까 하는 생각을 해본다.

검은색과 파란색을 가지고 표현된 그림을 보면 쪼오오오끔 아쉬웠다.



※ 제이펍 서평단 활동을 위해 지급 받은 도서에 대한 리뷰입니다.

반응형


개인적으로 SSH Client는

Ubuntu Terminal에서 직접 사용하는 것이 가장 편하다 보니

회사에서도 Main PC는 그냥 Ubuntu를 설치하고

Windows는 VirtualBox로 설치해 놓고 사용하고 있다.


하지만, 집에서는 여러가지 이유로 Main PC를 Windows10으로 사용할 수 밖에 없어서

SSH Client를 사용하기 위해서 VirtualBox로 Ubuntu 설치해놓고 그것을 이용하고 있다.


SSH Client를 필요로 하는 개발자라면 최소한 1번 이상은 사용해봤을 Putty가 있기는 하지만

개인적으로 썩 마음에 들지 않기에

Windows 환경에서 쓸만한 SSH Client를 계속 찾아보고 있다.


그러던 中 눈에 띈 Xshell !!



안타깝게도 Open-source 프로젝트는 아니다.

하지만, 개인 사용자에게는 무료 라이선스를 제공하고 있다.



이름과 이메일만 작성하면 다운로드 받을 수 있는 주소를 보내준다.



집에서만 사용하는 용도라면 충분히 훌륭하다.

그리고 난 착하게도(^^) 이렇게 포스팅을 하고 있으니 착한 사용자!!!



그냥 다운로드 받아서 설치하면 된다.



설치도 그냥 슉슉~



화면도 깔끔하다.



oh-my-zsh 폰트도 안깨지고 잘 나온다.

더 마음에 드는 것은 창 크기를 조절하면 그에 맞춰서 터미널도 반영된다는 것이다.



Xshell의 장점이자 단점인 것 같은데...

ANSI Color를 직접 컨트롤 하기 때문인 것으로 추정되는 원인으로 인하여

요즘 유행하는 bpytop을 실행하면 위 이미지처럼 배경색이 깨져서 나온다.


뭐 조금 아쉬운 부분은 있지만,

VirtualBox 띄워서 터미널 사용하는 것보다는 조금 가볍게 사용할 수 있다는 측면에서 충분히 만족한다.

그리고 여러 개의 창을 띄울 때에도 편하게 할 수 있어서 충분히 좋다.


반응형


요즘 몇 일 갑자기 유행하고 있는 bpytop



뭔가 멋지다!!!



Debian 계열에서 아래와 같이 설치가 된다고 했는데...


$ sudo apt install bpytop


내 Ubuntu 18.04에서는 안되었다.


그래서 설치~


$ sudo apt install python3 python3-pip


$ python3 -m pip install psutil


$ git clone https://github.com/aristocratos/bpytop.git


$ cd bpytop


$ sudo make install


실제 빌드가 되는 모습은 안보인다.

그냥 한 번에 뭔가 휙~ 그냥 끝


$ bpytop



우아~ 내거 VirtualBox에서 살고 있는 Ubuntu에서도 된다~!!!!


반응형

'잘난놈되기' 카테고리의 다른 글

kubectl 설치 (in Ubuntu)  (0) 2021.08.30
한글 지원되는 Ubuntu Docker Image 만들기  (0) 2021.07.27
하드디스크 용량 분석 (SpaceSniffer)  (0) 2020.12.28
Docker Hub 활용  (0) 2020.11.14
SiteMap  (0) 2020.08.30


컴퓨터를 새로 조립하면서

NVME 타입으로 C드라이브를 넣어주기로 하면서 512GB 용량으로 정했었다.


데이터 저장은 4TB 짜리 D드라이브를 넣어줄 것이기 때문에

C드라이브는 512GB 정도면 충분할 것이라 믿었는데...


갈수록 줄어드는 C드라이브의 여유 공간...


이제는 20GB도 남지 않았다.


대체 뭐가 나의 C드라이브를 잡아먹고 있는 것일까?!


그래서 찾아본 하드디스크 용량 분석 프로그램 ...




SpaceSniffer


  - 위키피디아에도 등록이 되어있는 아이로 골라봤다.

    . https://en.wikipedia.org/wiki/SpaceSniffer



  - 홈페이지도 있다.

    . http://www.uderzo.it/main_products/space_sniffer/



  - 2016년도 버전이 끝이라서 좀 우려스럽지만, 그래도 다운로드 받아서 실행해보자~!!

    . 다운로드 받아서 압축 풀고 실행하면 바로 실행된다.

    . 실행할 때 "관리자 권한으로 실행"을 해주는 것이 좋다. 파일 읽을 때 권한 관련해서 경고 받기 귀찮으면... ^^



  - 흐음... 뭔가 덩치 큰 아이들이 꽤 있군... 어?! pagefile.sys 이거 싫은데...

    . 컴퓨터 맞출 때 32GB 메모리를 넣었는데, 굳이 이걸... 그래서 가상메모리 사용안하도록 했더니...



  - 앗싸~ 40GB 정도의 여유 공간 확보했다.... 음... 다음에 용량 부족하면 게임 좀 지워야겠네... ㅠㅜ



반응형

'잘난놈되기' 카테고리의 다른 글

한글 지원되는 Ubuntu Docker Image 만들기  (0) 2021.07.27
bpytop 설치 (Ubuntu 18.04)  (2) 2020.12.31
Docker Hub 활용  (0) 2020.11.14
SiteMap  (0) 2020.08.30
Minikube 실습 - Pod 생성 (docker build & kubectl run & service)  (0) 2020.08.22

 

 

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

 

 

 

 

 

 

여기까지~

 

 

반응형



우리 아이가 어렸을 적에 쓰기 위해서 구매했던 노트북이 있었는데,

이제는 성능이 제대로 나오지 않아 새로운 노트북을 구매하면서 마땅한 사용처가 없어졌다.


그래서, 버리려다가 저전력 서버로 한 번 셋팅해보고자 마음을 먹었다.



무려 2세대 !!! ㅋㅋㅋ


메모리도 2GB 밖에 안되었는데...

마침 맥북프로 메모리 업그레이드 하면서 교체했던 것이 있어서 4GB로 업그레이드~!!





1. Ubuntu Server 다운로드


  - "Ubuntu Server 20.04.1 LTS" 버전으로 다운로드 받아서 설치하기로 했다.


  - https://ubuntu.com/download/server



  - "Option 3번"으로 다운로드 받으면 된다.





2. 설치 USB 만들기


  - 부팅 USB 만들기 위해서 rufus 포터블로 다운로드 받아보자.


  - https://rufus.ie/


  - 다운로드 받은 뒤 실행한 뒤에



  - 위와 같이 설정을 하면 된다. (파티션 방식, 대상 시스템, 파일 시스템, 클러스터 크기 등)



  - "시작"을 누르면 위와 같은 화면이 나오는데, 그냥 "예"를 선택하면 된다.



  - ISO 이미지 모드로 쓰면 된다.





3. 노트북 BIOS 셋팅


  - 일단 BIOS에 들어가면 된다. (삼성 노트북은 부팅할 때 F2를 눌러주면 된다)


  - Boot 순서 항목에서 USB를 앞으로 잡아주면 된다.






4. Ubuntu 설치


  - 설치 언어는 그냥 English로 잡아주자. 한글 등은 나중에 직접 잡아주면 된다.



  - 설치 중에... 유선랜을 연결하지 않았더니, 인터넷 안된다고 뭐라한다. 뭐 일단은 그냥 무시하고 고고~~~!!



  - 그냥 나머지는 쭉~쭉~ 설치하면 된다.


  - 하지만, 재부팅 후에 로그인을 해도... 무선랜이 동작하지 않는다. 이걸 잡아보자.





5. cloud-init 제거



$ sudo dpkg-reconfigure cloud-init


제일 하단의 None 항목 빼고 나머지 전부 선택을 해제


$ sudo apt purge cloud-init


$ sudo rm -rf /etc/cloud/

$ sudo rm -rf /var/lib/cloud/


또는,


$ sudo mv /etc/cloud /srv/remove/cloud-init/etc-cloud

$ sudo mv /var/lib/cloud/ /srv/remove/cloud-init/var-lib-cloud





(VirtualBox 에서 게스트 확장 설치하기)


  - 메뉴 - 장치 - 게스트 확장 CD 이미지 삽입...


$ sudo mkdir /media/cdrom


$ sudo mount -t iso9660 /dev/cdrom /media/cdrom


$ sudo apt install build-essential linux-headers-`uname -r`


$ sudo /media/cdrom/./VBoxLinuxAdditions.run


$ sudo umount -v /media/cdrom


$ sudo reboot






6. 무선랜 설정


  - Reference : https://medium.com/@yping88/how-to-enable-wi-fi-on-ubuntu-server-20-04-without-a-wired-ethernet-connection-42e0b71ca198


  - 무선랜 드라이버 설치를 위해 파일들을 복사해야 한다. 다음의 3개 파일을 다운로드 받자 (다른 PC에서)


    . http://mirrors.kernel.org/ubuntu/pool/main/w/wpa/wpasupplicant_2.9-1ubuntu4_amd64.deb

    . http://mirrors.kernel.org/ubuntu/pool/main/libn/libnl3/libnl-route-3-200_3.4.0-1_amd64.deb

    . http://mirrors.kernel.org/ubuntu/pool/main/p/pcsc-lite/libpcsclite1_1.8.26-3_amd64.deb


  - USB는 앞에서 사용한 것을 재활용하기로 하고, FAT32로 포맷해서 준비하자.


  - 앞에서 다운로드 받은 3개의 파일을 USB에 넣자.


  - USB를 우리의 Ubuntu Server Notebook에 꼽자


  - USB를 바로 사용하지는 못하지만, 꼽힌 것을 인식했는지를 우선 확인해보자.


$ sudo fdisk -l



  - 제일 아래 부분을 보면 USB가 보일 것이다. Device 명칭을 잘 확인하자.


  - USB를 mount 하기 위해서 mount 위치 용도의 디렉토리 하나 만들고 mount를 하자.


$ sudo mkdir /media/usb


$ sudo mount -t vfat /dev/sdb1 /media/usb



  - USB에서 보이는 3개의 파일을 설치하면 된다.


$ cd /media/usb


$ sudo dpkg -i libnl-route-3-200_3.4.0-1_amd64.deb libpcsclite1_1.8.26-3_amd64.deb wpasupplicant_2.9-1ubuntu4_amd64.deb


  - 이제는 무선랜카드가 잘 잡혔는지 확인해보자.


$ ls -al /sys/class/net/



  - 밑에 보면 "wlp2s0b1"과 같이 제대로 인식된 것을 확인해볼 수 있다. (물론 다른 환경에서는 다른 이름일 수도 있다!!!)


  - 다른 명령어로도 확인해볼 수 있다.


$ ip link



  - 무선랜카드가 잘 잡혔으니, 이제 무선랜 설정을 해보자.


  - netplan 으로 설정하면 되는데, 기존 설정 파일을 백업하고 설정 작업하면 된다.


$ sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml


$ sudo nano /etc/netplan/00-installer-config.yaml


network:

  ethernetes: {}

  version: 2

  wifis:

    wlp2s0b1:

      dhcp4: true

      optional:true

      access-points:

        "SSID Name":

          password: "**********"

  renderer: networkd


  - 각자 환경에 맞는 "SSID Name"과 "Password" 설정하면 된다.


  - 문법에 맞춰서 잘 설정했는지 확인해보자.


$ sudo netplan --debug generate


  - 문제가 없으면 이제 실제 적용을 해보자.


$ sudo netplan apply


  - 제대로 동작을 하는지 보기 위해서 재부팅을 하면 된다.


$ sudo reboot





7. 기본 패키지 업그레이드


  - 이제 인터넷이 되니 패키지 업그레이드를 하자


$ sudo apt update


$ sudo apt upgrade


  - 네트워크 관련 도구도 설치를 하자


$ sudo apt install net-tools





8. Language Pack 설치


  - 정상적인 한글 사용을 위해 Language Pack 설치를 해보자


$ sudo apt install language-pack-ko


$ sudo locale-gen ko_KR.UTF-8


$ sudo dpkg-reconfigure locales


$ sudo update-locale LANG=ko_KR.UTF-8 LC_MESSAGES=POSIX




9. Timezone 셋팅


  - Timezone도 제대로 되어있는지 셋팅해보자.


$ sudo timedatectl


$ sudo timedatectl list-timezones | grep Seoul


$ sudo timedatectl set-timezone Asia/Seoul


$ sudo timedatectl


$ date





10. nano 설정


  - 주요 데이터로 nano를 사용하기 위한 환경 설정도 해보자.


$ nano ~/.nanorc


set tabsize 4

set tabstospaces


  - root 계정을 위해서도 추가로 셋팅해주자.


$ sudo nano /root/.nanorc





11. 노트북 덮개 설정


  - 노트북 덮개를 닫더라도 절전 모드로 전환되지 않도록 하기 위한 설정을 하자.


$ sudo nano /etc/systemd/logind.conf


  - "HandleLidSwitch=ignore" 라인을 추가하면 된다.


...

#HandleLidSwitch=suspend

HandleLidSwitch=ignore 

...


  - 수정한 내역을 반영해보자.


$ sudo systemctl restart systemd-logind






12. ssh-server


  - 이미 설치되어있던데... 혹시 모르니


$ sudo apt install openssh-server


  - 이제 외부에서 접속해보면 된다.





13. git 설치하기


  - 요즘은 기본이 되어버린 git ... 설치하고 기본 환경 셋팅을 하자


$ sudo apt install git


  - 사용자 환경 설정을 하자


$ git config --global user.name "whatwant"


$ git config --global user.email "whatwant@whatwant.com"






14. zsh


  - zsh 설치해보자


$ sudo apt install zsh


$ sudo apt install fonts-powerline


$ chsh -s $(which zsh)


  - 로그아웃 하고 재로그인을 해야 이후 셋팅을 진행한다.



  - 그냥 2번으로 선택해보자.


  - oh-my-zsh 설치를 진행하자.


$ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"


  - theme를 변경해보자.


$ nano ~/.zshrc


# ZSH_THEME="robbyrussell"

ZSH_THEME="agnoster"


  - 또, 로그아웃 하고 재로그인 해보자. 원하는 모습으로 잘 나올 것이다.


  - 유용한 플러그인도 몇 가지 설치해보자


$ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting


$ git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions


  - 다운로드 받은 플러그인을 등록하자.


$ nano ~/.zshrc


#plugins=(git)

plugins=(git zsh-syntax-highlighting zsh-autosuggestions)


  - 그리고 다시 설정 파일을 로딩하면 된다.


$ source ~/.zshrc


  - 멀티라인으로 출력되도록 하자.


$ nano ~/.oh-my-zsh/themes/agnoster.zsh-theme


  - 아래 파란색으로 된 부분만 추가해주면 된다.


...

## Main prompt

build_prompt() {

  RETVAL=$?

  prompt_status

  prompt_virtualenv

  prompt_aws

  prompt_context

  prompt_dir

  prompt_git

  prompt_bzr

  prompt_hg

  prompt_newline

  prompt_end

}


## multiline

prompt_newline() {

  if [[ -n $CURRENT_BG ]]; then

    echo -n "%{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR

%(?.%F{$CURRENT_BG}.%F{red})❯%f"


  else

    echo -n "%{%k%}"

  fi


  echo -n "%{%f%}"

  CURRENT_BG=''

}


PROMPT='%{%f%b%k%}$(build_prompt) '






15. sudo 패스워드 없애기


  - 툭하면 sudo를 사용해야하는데, 자꾸 패스워드 입력하는 것이 귀찮으니 없애버리자.


$ sudo visudo


  - 원하는 계정에 대해서 아래와 같이 제일 밑에 라인을 추가하자


whatwant ALL=(ALL) NOPASSWD:ALL





16. NTP


  - 시간 자동 동기화 설정 여부를 확인해보자.


$ timedatectl status


                      Local time: 일 2020-12-27 03:10:03 KST

                 Universal time: 토 2020-12-26 18:10:03 UTC

                        RTC time: 토 2020-12-26 18:10:04

                      Time zone: Asia/Seoul (KST, +0900)

 System clock synchronized: no

                    NTP service: inactive

                RTC in local TZ: no


  - 위와 같이 "System clock synchronized: no"로 되어 있으면 이하 과정을 실행해야 한다.


$ sudo systemctl start systemd-timesyncd


$ sudo systemctl enable systemd-timesyncd


  - 다시 확인해보자


$ timedatectl status


                       Local time: 일 2020-12-27 03:17:33 KST

                  Universal time: 토 2020-12-26 18:17:33 UTC

                         RTC time: 토 2020-12-26 18:17:34

                       Time zone: Asia/Seoul (KST, +0900)

System clock synchronized: yes

                     NTP service: active

                  RTC in local TZ: no


  - 혹시라도 방화벽 이슈로 NTP 서버를 변경해야 하면 아래와 같이 하면 된다.


$ sudo nano /etc/systemd/timesyncd.conf


  - NTP 부분의 주석 삭제하고 아래와 같이 서버를 지정해주면 된다.


NTP=time.windows.com



반응형

'OS > Ubuntu' 카테고리의 다른 글

Tidy Viewer (tv) - CSV Viewer  (0) 2021.10.17
SSH Client on Windows (Xshell)  (0) 2021.01.03
LinuxBrew(HomeBrew) 설치하기 (Ubuntu 18.04)  (0) 2020.12.06
password 관리  (0) 2020.01.05
SSH 서버 포트 변경하기 (ssh server port change)  (0) 2019.07.28


오래된 노트북으로 서버 한 대를 셋팅하던 중, Docker를 설치하는 과정을 기록해보려 한다.



공식 홈페이지 가이드를 따라서 진행했다.

- https://docs.docker.com/engine/installation/linux/ubuntu/



※ 이 블로그를 계속 봐오신 분들은 아시겠지만... 아래 내용은 직접 실행해보면서 작성한 것입니다.



1. Ubuntu version

    - Ubuntu Focal 20.04 (LTS)


❯ lsb_release -a

No LSB modules are available.

Distributor ID: Ubuntu

Description: Ubuntu 20.04.1 LTS

Release: 20.04

Codename: focal


❯ uname -a  

Linux whatwant 5.4.0-58-generic #64-Ubuntu SMP Wed Dec 9 08:16:25 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux



2. Binary 확인

    - 웹으로 다운로드 받을 버전을 확인하자.


https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/



3. Download 받기


$ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/containerd.io_1.4.3-1_amd64.deb

$ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce-cli_20.10.1~3-0~ubuntu-focal_amd64.deb

$ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce_20.10.1~3-0~ubuntu-focal_amd64.deb



4. Docker 설치하기


$ sudo dpkg --install ./containerd.io_1.4.3-1_amd64.deb

$ sudo dpkg --install ./docker-ce-cli_20.10.1~3-0~ubuntu-focal_amd64.deb

$ sudo dpkg --install ./docker-ce_20.10.1~3-0~ubuntu-focal_amd64.deb



5. sudo 없이 실행하기


$ sudo usermod -aG docker $USER


  - 로그아웃 후 재로그인해야 적용



6. Hello World


$ docker run hello-world

Unable to find image 'hello-world:latest' locally

latest: Pulling from library/hello-world

0e03bdcc26d7: Pull complete 

Digest: sha256:1a523af650137b8accdaed439c17d684df61ee4d74feac151b5b337bd29e7eec

Status: Downloaded newer image for hello-world:latest


Hello from Docker!

This message shows that your installation appears to be working correctly.


To generate this message, Docker took the following steps:

 1. The Docker client contacted the Docker daemon.

 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.

    (amd64)

 3. The Docker daemon created a new container from that image which runs the

    executable that produces the output you are currently reading.

 4. The Docker daemon streamed that output to the Docker client, which sent it

    to your terminal.


To try something more ambitious, you can run an Ubuntu container with:

 $ docker run -it ubuntu bash


Share images, automate workflows, and more with a free Docker ID:

 https://hub.docker.com/


For more examples and ideas, visit:

 https://docs.docker.com/get-started/



끝~



반응형


간만에 자막 없는 영화를 보고 싶어서 선택한

디바


간만에 보이는 신민아 배우도 관심이 생겼고,

다이빙이라는 아이템도 신선해서 땡겼다.





감독은 85년생 조슬예 님이시다.

각본이나 스토리보드와 같은 작업을 많이 하셨고

심지어 단역이나 조연 출연도 하신 이력이 있다.


송강호 주연의 "택시운전사" 각본의 각색을 담당하기도 하였다.

강동원 주연의 "가려진 시간"에서는 각본을 담당하였다.


"디바" 영화는 조슬예 감독의

장편 데뷔작품이다.

각본도 직접 담당하셨다.





"다이빙"이라는 주제와

"신민아"라는 배우만으로

충분히 이 영화가 설명이 되지만...


굳이 "여성"이라는 프레임을

씌울 필요는 없다고 생각되지만

뉴스 기사로도 나왔기에 언급하자면...


제작사 / 감독 / 촬영감독 / 주연

모두 여성분들이시다.


제작사 올


그렇다고 해서 절대 오해를 하면 안된다.


"남성"에 대한 적개심이나

가부장적 문화에 대한 거부감을 표출하는 스토리가 아니다.


오히려

각본을 여성분이 썼기에

가능한 세밀한 감정 표현들

감각적인 카메라 표현 및 연기, 연출들...

개인적으로는 큰 장점으로 다가온 요소라고 생각한다.




이 영화는 신민아 배우가 90%는 먹고 들어갔다.




스토리는

학교 배경의 전교 1, 2등 아이끼리 벌어지는

우정(사랑?), 질투, 시기, 음모

뭐 그런 것들로 이루어진 이야기가

"다이빙"이라는 배경으로 바뀐 것 뿐이다.



그런데, 이게 억지스럽지 않고 너무나 자연스럽고 어울린다.


"다이빙"이라는 소재 자체도 너무나 어울렸고

다이빙장이라는 장소가 주는 느낌도

그리고 이것 저것 소품들도...




미스터리이기는 하지만

극 초반에 전체적인 미스터리가 예상이 된다.



사고가 나고

주인공과 친구가 나오고

둘 사이가 예상이 되고

의심스러운 부분이 뻔히 보이고...


그럼에도 불구하고

소재가 흥미롭고

연출도 자연스러워서

계속 보게 된다.




다만, 아쉬운 점은

영화의 전체적인 분위기인데...


현실적인 미스터리...

즉, 심리적인 감정 표현이나 실제 사건, 의심스러운 사람들로

만들어진 미스터리인지,


비현실적인 미스터리...

귀신과 같은 심령적인 것들로

만들어진 미스터리인지..


그 경계가 살짝 불분명한 부분들이 등장하면서

어떤 느낌으로 스릴러를... 미스터리를...

느껴야하는지 혼란스러웠다.



개인적으로는

좀 더 현실적인 미스터리로 끌고갔으면

몰입도가 훨씬 더 올라가면서

집중하기 좋았을 것 같다.




그리고 두번째로 아쉬운 점은 음악...

나쁜 것은 아니었지만

개인적으로는 음악이 극을 이끌어가지는 못하고

효과음과 같은 정도의 느낌이었다.

그런 상황에서 필요한 사운드... 딱 그 정도...


반면, 장소가 다이빙장(수영장?)이기에

물소리가 배경으로 깔리는 경우가 많은데

의외로 이 수영장만의 독특한 배경사운드가

묘한 느낌을 주어서 좋았다.




스릴러/미스터리 영화의 특징답게

실제 사건의 전말이 밝혀질 때의

반전...

나쁘지 않았다.


엄청 빡! 왕! 짱! 익사이팅!

뭐 그런건 아니었지만

"의외성"

이라는 측면에서는 신선했다.

하지만, 힘은 조금 빠지는 느낌이...


좀... 엔딩이... 찝찝한... 닦지 않은 느낌이...

이펙트가 너무 없다보니... 음...







조연들의 연기들은 모두 좋았다.

하지만, 그 개인들의 캐릭터가 충분히 부각되지는 않아 아쉽기는 하다.


거의 신민아의 신민아를 위한 신민아에 의한 영화다.


하지만, 조연들의 연기가 좋다보니

이게 그냥 깔끔한 느낌이 든다.






마지막 Credit을 보다가 깜짝 놀랐다.


"故 최아연 선수의 명복을 빕니다"


검색을 해보니 2019년 5월 4일에

중학교 2학년인 최아연(14)양이 훈련도중 다이빙대에 머리를 부딪치는 사고가 있었다고 한다.


https://www.sedaily.com/NewsView/1VJ3M9ZAF1


고인의 명복을 빕니다.


영화와 직접적인 관계가 있었는지는 확인이 안되지만

비슷한 시기에 관련된 사고가 있다보니

언급한 것이 아닌가 한다.





스릴러나 미스터리가 보고 싶지만

너무 머리아프거나 무서운 것은 싫은... 그럴 때 추천할 수는 있는 영화



반응형

+ Recent posts