여기 저기 돌아다니다가 발견한 재미있는 프로젝트 ~ !!!

 

https://windows96.net/

 

웹으로 만나는 Windows 9x 인터페이스를 보여주는 일종의 웹OS 이다.

 

 

웹사이트에 접속했을 뿐인데, 부팅 화면도 나온다.

 

 

Windows 부팅 사운드와 함께 정말 Windows 9x 화면이 나온다.

 

 

단순히 화면만 나오는 것이 아니다.

각 App이 정말 동작을 한다.

 

 

시작 메뉴 버튼도 정말 동작을 한다 !!!

 

 

심지어 Unity로 구현된 게임도 동작을 한다.

 

 

 

이 사이트에 대한 정보는 아래 링크에서 확인해볼 수 있다.

https://windows96.net/system/apps/wiki96/#home

 

 

MIKESOFT 이다. ㅋㅋㅋ

심지어 버그 리포트도 자신만의 UX로 접수 받는다.

 

 

 

2019년부터 개발된 사이트라고 하는데,

NES 에뮬레이터 등도 포함되어 있는 등 그 완성도가 정말 상당하다.

 

'JavaScript, HTML, WebAssembly, and CSS'를 사용했다고 하는데,

완성도도 완성도이지만 내부 구현 속도도 상당한 것을 보면 정말 대단한 Geeks ... 존경 !!!

반응형

VSCode를 웹으로 접근해서 사용할 수 있도록 해주는 code-server를 소개한 적이 있다.

- Web based Visual Studio Code (Online VSCode)

 

공식적으로 제공해주는 docker image가 있긴 하지만,

이번에는 Kubernetes에 올려서 사용하기 위한 나만의 docker image를 만들어보려고 한다.

 

0. 작업 환경

  - 이하 과정을 진행한 환경은 다음과 같다.

    . OS: Ubuntu 18.04 Desktop

    . Docker: Docker version 20.10.7, build f0df350

 

  - Docker 설치는 다음 포스팅을 참고하기 바란다.

    . Docker Install (Ubuntu Server 20.04 - 64bit) - using Download

  - 지금 포스팅을 작성하는 시점에서의 최신 버전은 다음과 같다.

    . containerd.io_1.4.8-1_amd64.deb

    . docker-ce-cli_20.10.7~3-0~ubuntu-focal_amd64.deb

    . docker-ce_20.10.7~3-0~ubuntu-focal_amd64.deb

 

 

1. Dockerfile & Scripts

  - 아래 내용은 다음 링크를 참조했다.

    . https://git.nofla.me/k8s-projects/codekube

  - 위 내용 중 필요한 부분만 뽑아내고 재구성을 한 내용을 전체 공유하면 아래와 같다.

 

    . Dockerfile

 

FROM ubuntu:20.04

RUN apt-get update && apt-get upgrade -y
RUN DEBIAN_FRONTEND="noninteractive" apt-get install -y \
    wget \
    vim \
    curl \
    dumb-init \
    zsh \
    htop \
    locales \
    man \
    nano \
    git \
    procps \
    openssh-client \
    sudo \
    jq \
    openssl \
    bash-completion \
    dnsutils \
    lsb-release

RUN apt-get install -y python3 python3-pip python3-dev build-essential

RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1
RUN update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1

RUN apt-get install -y apt-utils locales
RUN locale-gen ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8


RUN addgroup --gid 1000 code && \
    adduser --uid 1000 --ingroup code --home /home/code --shell /bin/bash --disabled-password --gecos "" code && \
    adduser code sudo
RUN chmod g+rw /home && \
    mkdir -p /home/code/workspace && \
    chown code:code /home/code/workspace -R


RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers;


RUN USER=code && \
    GROUP=code
RUN curl -SsL https://github.com/boxboat/fixuid/releases/download/v0.5/fixuid-0.5-linux-amd64.tar.gz | tar -C /usr/local/bin -xzf - && \
    chown root:root /usr/local/bin/fixuid && \
    chmod 4755 /usr/local/bin/fixuid && \
    mkdir -p /etc/fixuid && \
    printf "user: $USER\ngroup: $GROUP\n" > /etc/fixuid/config.yml


RUN CODE_SERVER_VERSION=3.11.0 && \
    curl -sSOL https://github.com/cdr/code-server/releases/download/v${CODE_SERVER_VERSION}/code-server_${CODE_SERVER_VERSION}_amd64.deb && \
    sudo dpkg -i code-server_${CODE_SERVER_VERSION}_amd64.deb


RUN cat /usr/lib/code-server/lib/vscode/product.json \
    | jq '.extensionAllowedProposedApi[.extensionAllowedProposedApi | length] |= . + "ms-vsliveshare.vsliveshare" \
        | .extensionAllowedProposedApi[.extensionAllowedProposedApi | length] |= . + "ms-vscode.node-debug" \
        | .extensionAllowedProposedApi[.extensionAllowedProposedApi | length] |= . + "ms-vscode.node-debug2"' \
    > /usr/lib/code-server/lib/vscode/product.json_ \
    && mv /usr/lib/code-server/lib/vscode/product.json_ /usr/lib/code-server/lib/vscode/product.json


RUN mkdir /opt/default_home
ADD warehouse/.bashrc /opt/default_home


ENV PASSWORD=${PASSWORD:-password}
EXPOSE 8080

ADD warehouse/restart-codekube.sh /usr/local/bin/restart-codekube
ADD warehouse/code.sh /usr/local/bin/code
ADD warehouse/startup.sh /startup.sh


RUN chmod a+x /usr/local/bin/*

ENTRYPOINT ["/bin/bash", "/startup.sh"]

 

  - 필요한 스크립트 파일은 다음과 같다.

    . .bashrc

 

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # We have color support; assume it's compliant with Ecma-48
    # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
    # a case would tend to support setf rather than setaf.)
    color_prompt=yes
    else
    color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

 

    . restart-codekube.sh

 

#!/bin/bash
kubectl get pods "$HOSTNAME" || (
    echo "Use kubens to switch to the namespace of this instance and try again!"
    echo "(we can't do this for you since we don't know the namespace name)"
    exit 1
)
kubectl delete pod "$HOSTNAME"

 

    . code.sh

 

#!/bin/bash
# Script that mimics the open-from-stdin functionality of VSCode
if [ "$1" == "-" ]; then
    TEMP=$(mktemp /tmp/stdin_XXXXXX)
    cat > "$TEMP"
    exec code-server -r "$TEMP"
    exit 0
fi;

# Pass through everything else to `code-server`
# Shellcheck SC2068 = quoting variables to prevent globbing - we want that here.
# shellcheck disable=SC2068
exec code-server $@

 

    . startup.sh

 

#!/bin/bash
[[ -f /home/code/.homedir-initialized ]] || (
    echo "Remove this file to re-copy files from /etc/skel /opt/default_home at next container startup" > /home/code/.homedir-initialized
    # dotglob to catch files like `.bashrc`
    shopt -s dotglob
    cp -r /etc/skel/* /home/code
    cp -r /opt/default_home/* /home/code
    shopt -u dotglob
    # install kubernetes ext
    #su code --login -c "/usr/bin/code-server --install-extension ms-kubernetes-tools.vscode-kubernetes-tools"
)
# make workspace dir if it doesn't exist
[[ -d /home/code/workspace ]] || mkdir /home/code/workspace
# chown stuff to kube:kube
chown code:code /home/code -R
# generate env whitelist from su using.. a blacklist, pretty much.
env_whitelist=$(env | cut -d = -f 1 | grep -v -e HOSTNAME -e PWD -e HOME -e TERM -e SHLVL -e LC_ALL -e ^_$ | tr "\n" "," | head -c -1)
# configure kubectl so vscode's kubernetes extension works
# su code --login -w "$env_whitelist" -c "/usr/local/bin/generate-kubeconfig.sh"
# start code-server
# su code --login -w "$env_whitelist" -c "/usr/bin/code-server --bind-addr 0.0.0.0:8080 /home/code/workspace" # --enable-proposed-api [\"ms-vsliveshare.vsliveshare\",\"ms-vscode.node-debug\",\"ms-vscode.node-debug2\"]
runuser code --login -w "$env_whitelist" -c "/usr/bin/code-server --bind-addr 0.0.0.0:8080 /home/code/workspace" # --enable-proposed-api [\"ms-vsliveshare.vsliveshare\",\"ms-vscode.node-debug\",\"ms-vscode.node-debug2\"]

 

 

2. 설명

  ① Ubuntu 20.04를 기준으로 했다.

    . 18.04도 가능할 것으로 보이지만, `startup.sh` 내용 中 마지막 라인에 있는

    . `su` 또는 `runuser`의 `-w` 옵션이 18.04에서는 적용되지 않아서 지금은 20.04로 했다.

    → 18.04에서도 적용 가능하도록 연구해보겠다 (언제가 될지는...^^)

 

  ② 개발환경으로 사용되기에 기본적인 패키지들을 설치했다.

    . 추후 필요에 따라 추가하면 된다.

    . `DEBIAN_FRONTEND="noninteractive"` 부분이 없으면 설치 중간에 사용자 입력을 기다리기도 한다. (설치 오류)

 

  ③ Python3 설치 (pip 포함)

    . 일단 python3 개발환경으로 맞췄다.

    . 다른 언어 또는 라이브러리가 필요하다고 하면 자유롭게~

 

  ④ 한글 환경 설정 (locale)

    . 이 부분이 없으면 한글 처리에 문제가 발생한다.

    . 참고: 한글 지원되는 Ubuntu Docker Image 만들기

  ⑤ 사용자 계정 만들기 (code)

    . `code`라는 사용자 계정을 생성해서 이를 기준으로 맞추고자 했다.

    . 패스워드 없이 sudo 사용할수 있도록 했다.

    . `fixuid`를 이용해서 `code` 계정의 uid를 전체적으로 맞추도록 했다.

 

  ⑥ code-server 설치

    . 현재 시점의 최신 버전 `3.11.0`이 설치하도록 했다.

 

  ⑦ (예정) LiveShare 적용 준비

    . 지금은 아니지만, 나중에 LiveShare Extension 사용하도록 하기 위해 집어넣은 부분이다.

    . 아직은 분석이 필요한 단계

 

  ⑧ default home 준비

    . `code` 계정을 생성하면서 `/home/code` 디렉토리가 만들어졌는데,

    . 사용 중에 `/home/code` 디렉토리가 사라지면

    . 이를 다시 생성할 때 필요한 `.bashrc` 파일 같은 것을 넣어놓기 위한 과정이다.

 

  ⑨ 패스워드 및 포트 설정

    . `code-server` 접근할 때 필요로 하는 password를 지정하는 부분이다.

    . 외부에 노출되는 포트는 `8080`으로 했다.

 

  ⑩ 스크립트 복사

    . 필요에 따라 만들어진 스크립트들을 복사해 넣는 부분이다.

 

  ⑪ 실행

    . 실행 명령어 지정

 

 

3. build Image

  - 이미지 만들기는 다음과 같다.

    . 당연히 알겠지만, `-f Dockerfile` 부분은 생략 가능하다. (다른 파일명을 사용하는 경우에만 필요)

 

$ docker build -t code-server:v0.1 -f Dockerfile .

 

 

4. run Docker

  - Docker로 실행해 볼 수 있다

 

$ docker run -it -p 8080:8080 --name code -e PASSWORD="0000" code-server:v0.1

 

다행히 잘 동작한다.

 

 

반응형

 

대! 한! 민! 국! 짜자자 짝!짝!

 

기본으로 제공되는 Ubuntu Docker Image는

우리에게 아름다운 한글을 제대로 지원해주지 않는다.

 

그래서 지금부터는 한글을 제대로 지원해주는 Ubuntu Docker Image를 만들어 보고자 한다.

 

 

0. 작업 환경

  - Ubuntu 18.04 Desktop

 

 

1. Docker 설치하기

  - 아래 링크를 참조하면 좋고~ 아니면 아래 과정을 주르륵 따라가도 좋다.

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

 

$ cd /srv/install
$ mkdir docker
$ cd docker

$ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/containerd.io_1.4.8-1_amd64.deb
$ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce-cli_20.10.7~3-0~ubuntu-focal_amd64.deb
$ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce_20.10.7~3-0~ubuntu-focal_amd64.deb

$ sudo dpkg --install ./containerd.io_1.4.8-1_amd64.deb
$ sudo dpkg --install ./docker-ce-cli_20.10.7~3-0~ubuntu-focal_amd64.deb
$ sudo dpkg --install ./docker-ce_20.10.7~3-0~ubuntu-focal_amd64.deb

$ sudo usermod -aG docker $USER

로그아웃 후 로그인
(Ubuntu Desktop에서 로그아웃으로 안되어서 재시작해버렸음)

$ docker run hello-world

$ nano ~/.zshrc
plugins=(... docker docker-compose)

 

  - 마지막 부분은 개인적으로 zsh을 사용하고 있기에... 자동 완성 기능을 추가해보았다.

 

 

2. Ubuntu Docker Image - 기본

  - 개인 취향으로 기본 패키지들을 조금 더 추가하는 것으로 Dockerfile을 다음과 같이 만들어 봤다.

 

FROM ubuntu:18.04

RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y \
        nano \
        git \
        curl \
        htop \
        man \
        openssh-client \
        sudo \
        wget \
        procps \
        lsb-release

 

  - 위 내용을 `Dockerfile.default` 파일명으로 저장한 뒤 build 하고 run 해보자.

 

host$ docker build -t ubuntu:default -f Dockerfile.default .

host$ docker run -it ubuntu:default bash

 

  - 텍스트 파일을 하나 만들어서 한글을 입력해보자. (물론 제대로 출력이 안되는 것이 정상이다)

 

default$ cd

default$ nano noname.txt

 

 

3. Ubuntu Docker Image - 한글 지원

  - 이번에는 한글을 지원해줄 수 있는 Dockerfile을 작성해 보자.

 

FROM ubuntu:18.04

RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y \
        nano \
        git \
        curl \
        htop \
        man \
        openssh-client \
        sudo \
        wget \
        procps \
        lsb-release

RUN apt-get install -y apt-utils locales
RUN locale-gen ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8

 

  - 아래 부분만 추가해서 `Dockerfile.ko_KR` 파일명으로 저장하고 진행해보자

 

host$ docker build -t ubuntu:ko_KR -f Dockerfile.ko_KR .

host$ docker run -it ubuntu:ko_KR bash

 

  - 똑같이 한글이 써지는지 테스트해보자.

 

ko_KR$ cd

ko_KR$ nano noname.txt

 

  - 이번에는 당연히 한글이 잘 써질 것이다!!!

 

 

Ubuntu 자체가 가벼운 이미지가 아니긴 하지만...

그래도 편한 맛에 사용한다고 하면 한글 지원이 필요할 때 참고하면 좋을 듯 하다.

반응형

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

NFS Server 설치 (Ubuntu 18.04/20.04)  (3) 2021.09.21
kubectl 설치 (in Ubuntu)  (0) 2021.08.30
bpytop 설치 (Ubuntu 18.04)  (2) 2020.12.31
하드디스크 용량 분석 (SpaceSniffer)  (0) 2020.12.28
Docker Hub 활용  (0) 2020.11.14

 

오늘 포스팅을 위해

그동안 많은 과정을 거쳐왔나보다 ^^

 

- 오래된 노트북 - 우분투 서버로 만들기 (Ubuntu 20.04 Server)

- Ubuntu 18.04 에서 Python3 편하게 사용하기
- Kubernetes Install (Ubuntu 20.04)
- Kubespray 이용하여 Kubernetes 설치하기
- Vagrant 이미지 업로드 (VirtualBox)
- Vagrant 사용하기 - 기본

- Vagrant 여러 개의 VM 생성하기

 

포스팅으로만 하면 위의 내용 정도뿐이지만,

그 뒤에서 공부하고 시행착오를 겪은 것을 합치면.... 에휴...

멍청하면 손발 뿐만 아니라 온몸이 고생한다더니...

 

 

로컬 환경에서 VM을 이용한 Kubernetes 실습 환경을 갖추는 것이 목표이다.

 

VM 생성도 Vagrant를 이용해서 기본적인 사항은 편하게 할 수 있도록 했고,

Kubernetes 설치 과정은 공부를 위해 직접 수행하는 방식으로 구성했다.

 

즉, Ubuntu 꾸미기(?) 등과 같은 과정은 Skip 하고

공부가 필요한 Kubernetes 설치 과정은 가급적 직접 수행해보자.

 

(물론 Kubespray를 사용하지 않고 정말 쌩으로 해보면 좋겠지만... 어느 정도는 ^^)

 

 

 

0. Host Environment

  - 다음 Spec이 최소사양이라는 말은 아니고, 참고하시라고...

    . CPU: AMD Ryzen 5 3600X

    . RAM: 32GB

    . VGA: Nvidia GeForce RTX 2060

    . OS: Windows 10 Pro

 

 

1. Vagrant 설치

  - https://www.vagrantup.com/

 

 

2. VirtualBox 설치

  - https://www.virtualbox.org/

 

 

3. Vagrant Up

  - 다음 내용의 Vagrantfile을 이용해서 VM을 생성하자

    (개인적인 취향으로 Host의 git-bash 환경에서 작업하는 것을 좋아하기에

     아래 sh 명령어들이 linux 스타일로 되어있다)

 

host$ mkdir k8s-vm
host$ cd k8s-vm
host$ nano Vagrantfile
host$ vagrant up

 

# -*- mode: ruby -*-
# vi: set ft=ruby :

N = 2


Vagrant.configure("2") do |config|


  config.vm.define "w-k8s-master" do |cfg|

    cfg.vm.box = "whatwant/Ubuntu-20.04-Server"
    cfg.vm.box_version = "0.2.0"

    cfg.vm.hostname = "master"
    cfg.vm.network "public_network", ip: "192.168.100.200"

    cfg.vm.provider "virtualbox" do |vb|
      vb.gui = false
      vb.cpus = "2"
      vb.memory = "2048"
    end

    cfg.vm.provision "shell", inline: <<-SHELL
      apt-get update
      apt-get upgrade -y
    SHELL

  end


  (1..N).each do |i|
    config.vm.define "w-k8s-worker#{i}" do |cfg|

      cfg.vm.box = "whatwant/Ubuntu-20.04-Server"
      cfg.vm.box_version = "0.2.0"

      cfg.vm.hostname = "worker#{i}"
      cfg.vm.network "public_network", ip: "192.168.100.20#{i}"

      cfg.vm.provider "virtualbox" do |vb|
        vb.gui = false
        vb.cpus = "1"
        vb.memory = "1280"
      end

      cfg.vm.provision "shell", inline: <<-SHELL
        apt-get update
        apt-get upgrade -y
      SHELL

    end
  end

end

 

  - master 1대, worker 2대 구성으로 했다.

  - VM 이미지는 Ubuntu 20.04 Server 기반으로 미리 살짝 꾸며둔 것을 이용했다.

  - VM의 CPU/RAM 설정은 가급적 최소한의 규격으로 잡아두었다.

  - `vagrant up` 했을 때 종종 실패를 하는데, 여러 번 try하면 결국 된다.

  - IP 설정은 각자의 공유기 셋팅에 따라 수정이 필요하다.

 

 

4. (master) Kubespray 실행 환경 만들기

  - Kubespray는 ansible 기반이기에 그에 따른 환경을 갖춰야 한다.

  - 필요한 package 설치 후 ssh 접근이 가능하도록 키 생성 & 배포를 진행한다.

  - 패스워드는 `vagrant`이다.

 

host$ ssh vagrant@192.168.100.200

master$ sudo apt install ansible python3-argcomplete

master$ ssh-keygen

master$ ssh-copy-id 192.168.100.200

master$ ssh-copy-id 192.168.100.201

master$ ssh-copy-id 192.168.100.202

 

  - ansible에서 접근할 서버 정보들을 입력해놓자

$ sudo nano /etc/ansible/hosts
[all]
master  ansible_ssh_host=192.168.100.200 ip=192.168.100.200 ansible_user=vagrant
worker1 ansible_ssh_host=192.168.100.201 ip=192.168.100.201 ansible_user=vagrant
worker2 ansible_ssh_host=192.168.100.202 ip=192.168.100.202 ansible_user=vagrant

[k8s_master]
master

[k8s_worker]
worker1
worker2

  - 테스트

$ ansible all -m ping

 

 

5. (master/worker) Kubernetes 설치를 위한 환경 설정

  - master/worker 모두 Kubernetes 설치를 위한 환경 설정을 진행해야 한다.

  - swap 공간 사용하지 않도록 하고, 서로 접근이 용이하게 되도록 host 설정을 해주자.

  - ip forward 기능도 활성화 시켜줘야 한다.

 

  - master/worker 접근은 앞에서 했던 것과 마찬가지로 `ssh vagrant@192.168.100.200/201/202` 방식으로...

 

master/worker$ sudo swapoff -a

master/worker$ sudo nano /etc/fstab
# /swap.img   none    swap    sw  0   0

master/worker$ sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

master/worker$ sudo nano /etc/hosts
192.168.100.200 master
192.168.100.201 worker1
192.168.100.202 worker2

 

 

6. (master/worker) Restart

  - 깔끔한 진행을 위해 이 시점에서 모두 restart 진행하고 이후 진행하자!

 

 

7. (master) Kubespray 이요한 Kubernetes 설치

  - 이제 기본환경 준비는 끝났다.

  - Kubespray 설치 준비를 할 차례다.

host$ ssh vagrant@192.168.100.200

master$ cd /srv/install

master$ git clone https://github.com/kubernetes-sigs/kubespray.git

master$ cd kubespray

master$ git checkout v2.16.0

master$ sudo pip install -r requirements.txt

master$ cp -rfp inventory/sample inventory/mycluster

master$ declare -a IPS=(192.168.100.200 192.168.100.201 192.168.100.202)

master$ CONFIG_FILE=inventory/mycluster/hosts.yaml python contrib/inventory_builder/inventory.py ${IPS[@]}

master$ nano ./inventory/mycluster/hosts.yaml

  - 아래와 같이 수정해보자.

all:
  hosts:
    master:
      ansible_host: 192.168.100.200
      ip: 192.168.100.200
      access_ip: 192.168.100.200
    worker1:
      ansible_host: 192.168.100.201
      ip: 192.168.100.201
      access_ip: 192.168.100.201
    worker2:
      ansible_host: 192.168.100.202
      ip: 192.168.100.202
      access_ip: 192.168.100.202
  children:
    kube_control_plane:
      hosts:
        master:
    kube_node:
      hosts:
        worker1:
        worker2:
    etcd:
      hosts:
        master:
    k8s_cluster:
      children:
        kube_control_plane:
        kube_node:
    calico_rr:
      hosts: {}

  - 당연하게도 위의 설정은 각자 IP 환경에 맞게 업데이트

 

master$ nano ./inventory/mycluster/group_vars/k8s_cluster/addons.yml

 

  - addons는 아래 3개 정도만 해보자. (ingress는 나중에 직접 설치할 것이다)

dashboard_enabled: true
helm_enabled: true
metrics_server_enabled: true

 

  - proxy mode도 iptables로 변경해보자

master$ nano ./inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
# Kube-proxy proxyMode configuration.
# Can be ipvs, iptables
kube_proxy_mode: iptables

 

 

8. (master) execute

  - 이제 정말로 준비는 끝났다. 설치 시작~!!

master$ cd /srv/install/kubespray

master$ ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml

 

 

9. (master) 계정 설정

  - root가 아닌 일반 계정에서 `kubectl` 명령어를 사용하기 위한 설정을 하자

 

master$ mkdir -p $HOME/.kube

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

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

master$ echo "source <(kubectl completion zsh)" >> ~/.zshrc

master$ source ~/.zshrc

 

 

10. (master) 점검

  - 잘 되었는지 살펴보자.

master$ kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:6443

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.



master$ kubectl get nodes
NAME    STATUS     ROLES                  AGE   VERSION
node1   Ready      control-plane,master   14m   v1.20.7
node2   NotReady   <none>                 13m   v1.20.7
node3   NotReady   <none>                 13m   v1.20.7

 

 

성공~!!!

반응형

'Dev Tools > Kubernetes' 카테고리의 다른 글

Kubernetes 설치  (0) 2023.04.17
Install `NGINX Ingress Controller` in Kubernetes  (4) 2021.09.18
MinIO StandAlone in Kubernetes  (0) 2021.05.13
Kubespray 이용하여 Kubernetes 설치하기  (4) 2021.05.04
Kubernetes Install (Ubuntu 20.04)  (0) 2020.12.28

 

지금까지 Vagrant 공부 내용

- Vagrant 이미지 업로드 (VirtualBox)

- Vagrant 사용하기 - 기본

 

 

지금 Vagrant를 이렇게 정리하면서 공부하는 이유는

Kubernetes 실습 환경 구축을 Vagrant를 이용해서 편하게 VirtualBox로 띄우고 싶어서이다.

 

최소한 "Master 1대 + Worker 2대 = 3대", 또는 "Master 1대 + Worker 3대 = 4대"

구성을 하고자 하는데 앞에서 알아본 Vagrantfile은 VM 1대 구성밖에 안되는 내용이었다.

 

그래서 이번에는 여러개의  VM을 생성하는 Vagrantfile에 대해서 알아보고자 한다.

 

 

지난 포스팅에서 작성해보았던 Vagrantfile을 살펴보면 다음과 같다.

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.vm.box = "whatwant/Ubuntu-20.04-Server"
  config.vm.box_version = "0.1.0"

  config.vm.network "public_network", ip: "192.168.100.201"

  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.cpus = "2"
    vb.memory = "2048"
  end

  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get upgrade -y
  SHELL

end

 

그러면 여러개의 VM을 정의하는 Vagrantfile은 어떻게 생겼을까?

 

# -*- mode: ruby -*-
# vi: set ft=ruby :

N = 2


Vagrant.configure("2") do |config|


  config.vm.define "w-k8s-master" do |cfg|

    cfg.vm.box = "whatwant/Ubuntu-20.04-Server"
    cfg.vm.box_version = "0.2.0"

    cfg.vm.hostname = "master"
    cfg.vm.network "public_network", ip: "192.168.100.200"

    cfg.vm.provider "virtualbox" do |vb|
      vb.gui = false
      vb.cpus = "2"
      vb.memory = "2048"
    end

    cfg.vm.provision "shell", inline: <<-SHELL
      apt-get update
      apt-get upgrade -y
    SHELL

  end


  (1..N).each do |i|
    config.vm.define "w-k8s-worker#{i}" do |cfg|

      cfg.vm.box = "whatwant/Ubuntu-20.04-Server"
      cfg.vm.box_version = "0.2.0"

      cfg.vm.hostname = "worker#{i}"
      cfg.vm.network "public_network", ip: "192.168.100.20#{i}"

      cfg.vm.provider "virtualbox" do |vb|
        vb.gui = false
        vb.cpus = "1"
        vb.memory = "1024"
      end

      cfg.vm.provision "shell", inline: <<-SHELL
        apt-get update
        apt-get upgrade -y
      SHELL

    end
  end


end

 

더 이상 설명할 것이 없을 것 같다.

위의 2개 Vagrantfile을 비교해보면서 살펴보면 될 것 같다.

 

`N = 2` 값을 통해 아래 순환문을 컨트롤 하고...

`#{i}` 값을 통해서 숫자를 변수처럼 할당해서 hostname이나 ip값을 지정해주었다.

 

 

 

별도의 디렉토리를 생성한 뒤

위와 같은 `Vagrantfile`을 작성하고

`vagrant up` 명령어로 실행하면 간단하게 VM이 3개가 생성된다.

 

 

다만, 지난 번부터 `vagrant up` 실행했을 때 오류 메시지와 함께 실패를 종종 경험하게 되어 아쉬운 점은 있다.

다시 `vagrant up`을 하면 성공하기도 하고, 여러번 실행해야 성공하기도 하고

때로는 `vagrant destroy`로 전부 삭제 뒤, 다시 `vagrant up`을 해야하기도 했다.

 

 

밑의 3개 VM이 vagrant로 생성된 아이들이다.

 

반응형

 

주석만 작성해도, function 이름만 적어줘도 AI가 코드를 대신 작성해준다고 하는 Copilot !!!

 

광고/홍보를 그렇게 해놓고는...

한정된 사람들만 사용할 수 있게 해주는 불친절한 GitHub !! 아니 MS !!!

 

 

뭐 어떻게 어떻게 사용해볼 수 있기 기회를 얻어서

다음과 같이 사용해보았다.

 

Already enabled

 

내 본캐 계정에서는 아직도 대기중인데...

 

Extension

 

GitHub 웹사이트에서 바로 사용하는 것은 말이 안되기에 어떤 방식으로 제공해주나 했는데...

Visual Studio Code Extension 형태로 제공해준다 !!!

Extension 설치 !!!

 

VSCode Extension

 

21만명이 사용하고 있나보다.

별점이 4개 밖에 안되네!? ㅋㅋㅋ

 

Sign in to GitHub

 

당연하게도 GitHub 로그인 과정을 거쳐야 한다!!!

 

Authorize

 

token

 

열기 하니까 잘 되었다.

잘 안되는 사람들은 아래에 나오는 방식으로 진행하면 되겠죠 ?!

 

function

 

사용법은 간단하다.

함수 이름 작성 하고 파라미터 정의하고 `{` 입력하면 회색으로 갑자기 딱! Suggestion을 보여준다.

 

마음에 들면 `Tab`키 누르면 되고,

마음에 안들면 `Alt + [` 또는 `Alt + ]` 누르면 다른 suggestion 들을 보여주게 된다.

 

그런데, 속도 이슈인지 `Alt + [` 또는 `Alt + ]` 눌렀을 때에 전환이 잘 안되는 경우가 많았다.

 

Ctrl + Enter

 

Suggestion 목록을 한 번에 보고 싶으면 `Ctrl + Enter`를 누르면 된다.

위 그림과 같이 오른쪽에 suggestion 목록을 전체 보여준다.

 

속도 이슈로 한번에 나오지 않더라도 기다리면 주르륵 나온다.

`Alt + [` 또는 `Alt + ]`는 다른 suggestion이 없는 것인지 아직 로딩 중인지 알 수 없어서 불편한데

차라리 그냥 `Ctrl + Enter`를 이용해서 전체를 보고 하는 것이 좋을 것 같다.

 

주석

 

함수 이름만으로는 의도를 제대로 전달하기 어려울 수 있다.

그럴 때에는 주석을 앞에 적어주면 된다.

 

Framework

 

함수만 지원하는 것도 아니다.

Express server를 사용하겠다라는 주석만으로도 코드를 제안해준다.

 

 

 

지금까지 알아본 과정은 GitHub에서 제공해주는 Start Guide로 진행해보았다.

- https://github.com/github/copilot-preview/blob/main/docs/gettingstarted.md

 

혹시 웹 관련된 JS만 잘되는 것 아닐까?

 

Python

 

확장자가 `*.py`인 파일을 만들고

`Authentication to GitHub Enterprise instance`와 같이 주석을 작성해보았다.

 

와우! stackoverflow 검색 보다는 훨씬 빠르게 코드를 찾아준다.

다만, 내용을 살펴보니 내가 원하는 실제 사용가능한 수준으로까지는 없었다.

 

주석 내용을 조금 더 디테일하게... 구체적으로 적어줘야 원하는 내용을 제안해줄 것으로 보인다.

 

한글

 

한글도 지원을 잘 해줄까!?

 

위 그림과 같이 잘 해준다 !!!

 

한글로 된 주석이 github.com에 그다지 많지 않을거라

제한적인 상황에서만 유용할 것 같지만,

여하튼 한글도 된다 !!!

 

token

 

업로드 한 사람의 잘못이긴 하겠지만

위 그림과 같이 secret 값들도 그대로 suggestion 된다.

 

이런 부분은 주의해야할 것 같다.

 

 

결론적으로 원하는 사항에 대해서 잘 정의할 수 있으면

최소한 Stackoverflow 검색하는 것보다 빠른 시간 안에 code를 suggestion 받을 수 있는 재미있는 기능이다.

 

실무에서도 유용할 지에 대해서는 직접 프로젝트를 진행하면서 사용해봐야 할 것이고,

최소한 PoC 하거나 처음 해보는 사항에 대해서 접근할 때에는 상당히 유용할 것으로 보인다.

 

반응형

 

"최적의 리액트 코드를 작성하기 위한 모범 사례와 패턴"

 

책의 표지에 적혀있는 문구이다.

 

표지

 

러닝 리액트 - 10점
알렉스 뱅크스.이브 포셀로 지음, 오현석 옮김/한빛미디어

 

 

React를 공부하겠다라고 하면

주변 사람들이 입문서로 가장 많이 추천한 책이었는데,

마침 이번에 새로 개정까지 되었다니~ 금상첨화 !!!

 

 

표지

 

표지를 보면 알겠지만,

21년 7월 1일 1쇄 발행이다!

 

 

이 책의 포지션은 "입문서"이지만,

중급자가 보기에도 나쁘지는 않을 것 같다.

 

CONTENTS

 

목차를 보면

리액트에 대한 소개는 물론이고

변수 선언이나 함수 만들기부터

친절하게 차근 차근 소개를 해주고 있다.

 

 

사실 리액트의 시작은 얼굴책-Facebook이다.

 

Facebook에 적용이 되었다고 하여 유명세를 얻게 되었으며

심지어 별스타그램-Instagram도 리액트로 만들었다고 해서

많은 신도들을 불러들인 라이브러리이다.

 

리액트의 과거와 미래

 

책에서도 이러한 리액트의 역사와 비전에 대해서도

짧게나마 소개해준다.

 

 

요즘 기본이 된 사항이지만

이 책에서 사용된 소스 코드들을

GitHub로 제공해주고 있다.

 

코드 예제

https://github.com/MoonHighway/learning-react

 

MoonHighway/learning-react

The code samples for Learning React by Alex Banks and Eve Porcello, published by O'Reilly Media - MoonHighway/learning-react

github.com

 

 

[ Pros ]

- 리액트 입문자를 위한 친절한 책

: 리액트는 무엇인지, 변수 선언은 어떻게 하는지와 같은

기초적인 것부터 친절하고 쉽게 설명해준다.

 

- 샘플 코드와 결과를 보기 쉽게 제공

: 편집의 힘인 것 같은데,

희한하게 다른 책과 뭐가 다른지 딱 꼬집아 말할 수는 없지만

책을 보면서 소스 코드가 눈에 잘 들어왔다.

그리고 결과 등을 보여주는 부분도 보기 좋았다.

 

- 충실한 github.com 예제/정보 제공

: 예제 코드를 제공해주는 github에 꼭 접속해보기 바란다.

책에서 아쉬운 부분도 많이 채워준다.

Chapter에 맞춰서 꼭 github도 같이 보기를 강력하게 추천한다.

 

[ Cons ]

- 개발환경 구축에 대한 설명 미흡

: 입문자를 위한 책임에도

개발환경을 갖추는 부분에 대한 설명이 조금 부족하다.

없는 것은 아닌데... 아쉽다.

 

- 기능 설명의 나열

: 차근 차근 공부하려는 분들에게는 좋을 수도 있는 부분인데

바로 뭔가 만들면서 공부하는 것을 좋아하는 사람에게는 조금 아쉽다.

사전처럼 필요한 부분을 찾아서 보기에 좋을 수도 있기는 한데...

이 책만 가지고 리액트를 공부하기에는 조금 아쉬울 수 있을 것 같다.

 

[ 총평 ]

- 리액트를 공부하기 시작했다면 꼭 갖고 있기를 추천

클론 코딩과 같은 강의를 들으면서 보면 더더욱 많은 도움이 될 것 같다!

 

 

 

 

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

반응형

 

Vagrant를 이용해서 VirtualBox에 설치할 이미지 만들기 및 등록까지 했으니

  - https://www.whatwant.com/entry/Vagrant-Box

 

이제는 실제 사용을 해보자.

 

 

01. create Workspace

  - Vagrant 사용을 위해서는 제일 먼저 작업을 실행할 Directory를 하나 만들어야 한다.

  - Workspace 하나 만든다고 생각하면 될 것 같다.

 

> mkdir vagrant-hello

    디렉터리: C:\Users\whatw\workspace

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2021-07-14   오후 2:00                vagrant-hello



> cd .\vagrant-hello\

 

 

02. init

  - Workspace 안에서 init 작업을 하면 된다.

  - `init` 뒤에는 사용할 이미지 주소를 적어주면 된다.

> vagrant init whatwant/Ubuntu-20.04-Server

==> vagrant: A new version of Vagrant is available: 2.2.17 (installed version: 2.2.16)!
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.


> dir

    디렉터리: C:\Users\whatw\workspace\vagrant-hello

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----      2021-07-14   오후 2:04           3104 Vagrantfile

 

03. check Vagrantfile

  - `init`을 하면 `Vagrantfile`을 생성해준다.

  - 첫 줄을 보면 알겠지만, ruby 포맷이다..... ㅠㅜ

 

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  config.vm.box = "whatwant/Ubuntu-20.04-Server"

  # Disable automatic box update checking. If you disable this, then
  # boxes will only be checked for updates when the user runs
  # `vagrant box outdated`. This is not recommended.
  # config.vm.box_check_update = false

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # NOTE: This will enable public access to the opened port
  # config.vm.network "forwarded_port", guest: 80, host: 8080

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network "private_network", ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  # config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
  # end
  #
  # View the documentation for the provider you are using for more
  # information on available options.

  # Enable provisioning with a shell script. Additional provisioners such as
  # Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <<-SHELL
  #   apt-get update
  #   apt-get install -y apache2
  # SHELL
end

 

04. check IP

  - 이 부분은 필요하신 분들만 선택적으로 하면 된다.

  - Why : 이 부분을 진행하는 이유는 다음과 같다.

    . 집에서 공유기를 사용하고 있음

    . VirtualBox에서 Ubuntu를 여러개를 실행할 계획인데,

    . 서로 간의 통신을 구성하기 위해서 각 Ubuntu의 IP를 고정하고 싶음

 

  - 공유기에서 비어있는 IP를 확인해놓자

 

 

  - 각자의 공유기에 따라 관리 페이지 들어가서 현재 할당되어 있는 IP 내역 확인하고,

  - 나중에 MAC 주소에 따른 IP 할당 설정을 해보자.

 

 

05. edit Vagrant

  - 리소스 포함해서 원하는 VM 모습으로 설정해보자

 

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.vm.box = "whatwant/Ubuntu-20.04-Server"
  config.vm.box_version = "0.1.0"

  config.vm.network "public_network", ip: "192.168.100.201"

  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.cpus = "2"
    vb.memory = "2048"
  end

  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get upgrade -y
  SHELL

end

 

 

06. Vagrant Up

  - 실행해보자 !!

 

> vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'whatwant/Ubuntu-20.04-Server'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'whatwant/Ubuntu-20.04-Server' version '0.1.0' is up to date...
==> default: Setting the name of the VM: vagrant-hello_default_1626272864694_38723
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: bridged
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection reset. Retrying...
    default: Warning: Connection aborted. Retrying...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => C:/Users/whatw/workspace/vagrant-hello
==> default: Running provisioner: shell...
    default: Running: inline script
    default: Hit:1 http://kr.archive.ubuntu.com/ubuntu focal InRelease
    default: Get:2 http://kr.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
    default: Get:3 http://kr.archive.ubuntu.com/ubuntu focal-backports InRelease [101 kB]
    default: Get:4 http://kr.archive.ubuntu.com/ubuntu focal-security InRelease [114 kB]
    default: Get:5 http://kr.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [1,086 kB]
    default: Get:6 http://kr.archive.ubuntu.com/ubuntu focal-updates/main Translation-en [239 kB]
    default: Get:7 http://kr.archive.ubuntu.com/ubuntu focal-updates/main amd64 c-n-f Metadata [13.8 kB]
    default: Get:8 http://kr.archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [841 kB]
    default: Get:9 http://kr.archive.ubuntu.com/ubuntu focal-updates/universe Translation-en [176 kB]
    default: Get:10 http://kr.archive.ubuntu.com/ubuntu focal-updates/universe amd64 c-n-f Metadata [18.3 kB]
    default: Get:11 http://kr.archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [5,792 B]
    default: Get:12 http://kr.archive.ubuntu.com/ubuntu focal-backports/universe amd64 c-n-f Metadata [288 B]
    default: Get:13 http://kr.archive.ubuntu.com/ubuntu focal-security/main amd64 Packages [745 kB]
    default: Get:14 http://kr.archive.ubuntu.com/ubuntu focal-security/main Translation-en [148 kB]
    default: Get:15 http://kr.archive.ubuntu.com/ubuntu focal-security/main amd64 c-n-f Metadata [8,036 B]
    default: Get:16 http://kr.archive.ubuntu.com/ubuntu focal-security/universe amd64 Packages [629 kB]
    default: Get:17 http://kr.archive.ubuntu.com/ubuntu focal-security/universe Translation-en [96.2 kB]
    default: Get:18 http://kr.archive.ubuntu.com/ubuntu focal-security/universe amd64 c-n-f Metadata [11.6 kB]
    default: Fetched 4,346 kB in 13s (322 kB/s)
    default: Reading package lists...
    default: Reading package lists...
    default: Building dependency tree...
    default:
    default: Reading state information...
    default: Calculating upgrade...
    default: The following packages will be upgraded:
    default:   libuv1 linux-base
    default: 2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
    default: 1 standard security update
    default: Need to get 98.5 kB of archives.
    default: After this operation, 0 B of additional disk space will be used.
    default: Get:1 http://kr.archive.ubuntu.com/ubuntu focal-updates/main amd64 libuv1 amd64 1.34.2-1ubuntu1.3 [80.8 kB]
    default: Get:2 http://kr.archive.ubuntu.com/ubuntu focal-updates/main amd64 linux-base all 4.5ubuntu3.6 [17.8 kB]
    default: dpkg-preconfigure: unable to re-open stdin: No such file or directory
    default: Fetched 98.5 kB in 1s (73.4 kB/s)
    default: (Reading database ...
(Reading database ... 45%abase ... 5%
(Reading database ... 55%abase ... 50%
    default: (Reading database ... 60%
    default: (Reading database ... 65%
    default: (Reading database ... 70%
    default: (Reading database ... 75%
    default: (Reading database ... 80%
    default: (Reading database ... 85%
    default: (Reading database ... 90%
    default: (Reading database ... 95%
(Reading database ... 145156 files and directories currently installed.)
    default: Preparing to unpack .../libuv1_1.34.2-1ubuntu1.3_amd64.deb ...
    default: Unpacking libuv1:amd64 (1.34.2-1ubuntu1.3) over (1.34.2-1ubuntu1.1) ...
    default: Preparing to unpack .../linux-base_4.5ubuntu3.6_all.deb ...
    default: Unpacking linux-base (4.5ubuntu3.6) over (4.5ubuntu3.5) ...
    default: Setting up linux-base (4.5ubuntu3.6) ...
    default: Setting up libuv1:amd64 (1.34.2-1ubuntu1.3) ...
    default: Processing triggers for man-db (2.9.1-1) ...
    default: Processing triggers for libc-bin (2.31-0ubuntu9.2) ...

 

  - `Vagrantfile`에서 `vb.gui = false` 설정을 했기에, `VirtualBox`가 별도 실행되지 않는다.

  - 직접 `VirtualBox`를 실행해보면 다음과 같이 새로 머신이 하나 추가된 것을 볼 수 있다.

 

 

  - 머신 이름은 새로 생성한 Workspace(Directory) 이름 + 별칭 + 랜덤 숫자 ...

  - 머신을 더블 클릭하면 실행된 머신이 나타난다

 

 

  - 로그인 ID / Password는 모두 `vagrant`

 

 

07. status

  - 현재 `Vagrant`의 상태를 확인해보자.

  - 사용할 수 있는 명령어도 친절히 알려준다.

 

> vagrant status

Current machine states:

default                   running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

 

여기까지 끄읕~

반응형

+ Recent posts