<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>wogus_93.log</title>
        <link>https://velog.io/</link>
        <description>차근차근 배워나가자</description>
        <lastBuildDate>Sun, 09 Jul 2023 05:52:29 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>wogus_93.log</title>
            <url>https://velog.velcdn.com/images/wogus_93/profile/c2b26b75-5ef1-4b10-a4fb-91716fa3fe20/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. wogus_93.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/wogus_93" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[User sudo 권한 받는 방법 (Permission denied) + docker]]></title>
            <link>https://velog.io/@wogus_93/User-sudo-%EA%B6%8C%ED%95%9C-%EB%B0%9B%EB%8A%94-%EB%B0%A9%EB%B2%95-Permission-denied-docker</link>
            <guid>https://velog.io/@wogus_93/User-sudo-%EA%B6%8C%ED%95%9C-%EB%B0%9B%EB%8A%94-%EB%B0%A9%EB%B2%95-Permission-denied-docker</guid>
            <pubDate>Sun, 09 Jul 2023 05:52:29 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h4 id="linux를-사용하다-보면-permission-denied되었다는-문구를-자주-마주치게-됩니다">Linux를 사용하다 보면 permission denied되었다는 문구를 자주 마주치게 됩니다.</h4>
</blockquote>
<p>단발성으로 발생했을 경우는 앞에 sudo 를 붙이면 보통 해결되기 때문에, 그냥 지나치지만 docker같은 응용 프로그램을 사용할 경우, 거의 모든 명령어에 sudo를 붙여야 되서 여간 불편한게 아닙니다.</p>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/4fe67df3-5cbe-404b-adcb-53aeaff46ee8/image.png" alt=""></p>
<p>오늘은 이 불편한 행동을 생략할 수 있게 만들어주는 user 자체에 sudo 권한을 부여하는 방법에 대해 알아보도록 하겠습니다.</p>
<h2 id="root란">Root란?</h2>
<p>Linux OS를 설치하게 되면, root라는 최상위 사용자가 생성이 됩니다. 이 root는 모든 권한을 가지고 있는 관리자로 root 계정으로 들어갈 경우, 모든 디렉토리나 파일에 접근할 수 있고, 수정 및 생성, 삭제까지 진행할 수 있습니다. </p>
<p>따라서 이 root라는 관리자는 매우 중요한 역할을 하며,  실수로 필수적인 파일들을 삭제하지 않기 위해 유저에게 sudo 권한을 부여해서 사용하는 것입니다.</p>
<p>하지만 이런 점은 개인이 사용하는 PC에서는 보통 중요하지 않습니다. 그저, 명령어를 빨리 입력하기를 원할 뿐이죠.</p>
<h2 id="계정에-권한-주는-방법">계정에 권한 주는 방법</h2>
<p>현재 사용하는 계정에 권한을 주는 방법은 다음과 같습니다.
우선 지금 부여하려는 계정의 정보를 확인합니다. 정보는 Terminal에 whoami라고 적으면 현재 내가 들어와있는 계정이 어떤 것인지 표현됩니다.</p>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/9787ee94-41bd-49b3-95dd-d933b522efc8/image.png" alt=""></p>
<p>이후, visudo라는 명령어를 사용하면 /etc/sudoer 파일에 접근할 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/56cda44d-73cb-43f2-a493-02d77018e2ae/image.png" alt=""></p>
<p>맨 하단에, 사용자의 이름과 권한을 부여한다는 내용을 추가해주면 됩니다.</p>
<p>저의 경우 추가로 패스워드 생략까지 부여했습니다.</p>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/af3660d9-ca6c-4eb1-9657-44521f5c1e2c/image.png" alt=""></p>
<h2 id="docker에-권한-주는-방법">Docker에 권한 주는 방법</h2>
<p>추가로, docker에 sudo 권한을 주는 방법은 다음과 같습니다.</p>
<pre><code class="language-bash">$sudo usermod -aG docker {user id}
// usermod : user의 속성을 변경하는 명령어입니다.
// -G : 새로운 그룹을 말합니다.(group)
// -a : 다른 그룹에서 삭제 없이 Group에 해당 User를 추가하는 옵션입니다.(append)</code></pre>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/52fc6dc7-09ac-47a3-b544-a43cca171bbd/image.png" alt=""></p>
<p>이후, sudo 없이 명령어가 정상적으로 작동되는 것을 볼 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/d67d1ca4-9749-47e0-b947-65b5b01a3b63/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Yocto project -Layer]]></title>
            <link>https://velog.io/@wogus_93/jcoxn32y</link>
            <guid>https://velog.io/@wogus_93/jcoxn32y</guid>
            <pubDate>Sat, 08 Jul 2023 08:04:50 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/wogus_93/post/6e0e130b-4b0a-45eb-81cd-e6f564b0a847/image.png" alt=""></p>
<h2 id="layer란-무엇일까요">Layer란 무엇일까요?</h2>
<p>Yocto 내에서 관련이 있는 Recipe들을 모아놓은 곳을 Layer라고 부르며, naming을 Meta-<layername>으로 규약하고 있습니다.</p>
<p>이전에 받아 놓은 poky directory를 한번 살펴보도록 하겠습니다.</p>
<h2 id="poky-directory-분석">Poky directory 분석</h2>
<p>  poky directory를 보면 meta, meta-poky, meta-selftest, meta-skeleton, meta-yocto-bsp라는 layer들이 존재하고 있는 것을 볼 수 있습니다.</p>
<p>이것들은 yocto project를 구성하는 핵심 layer이며, 이것들 뿐만 아니라 개발자는 custom layer를 생성하여 기능적인 요소들을 추가할 수 있습니다.
  <img src="https://velog.velcdn.com/images/wogus_93/post/72c77f0a-1947-4dee-afc2-c1b83487b6a5/image.png" alt=""></p>
<p>  yocto에서 굳이 layer를 만들어 사용하는 이유는 무엇일까요? 그것은 바로 내부 컴포넌트들을 좀 더 체계적으로 관리하기 위해서입니다.
  구성 layer 중 하나인, meta-poky의 구조를 예로 살펴보도록 하겠습니다.</p>
<blockquote>
<h4 id="한편-디렉토리-구조를-살펴볼-때-저는-tree라는-명령어를-사용합니다">한편, 디렉토리 구조를 살펴볼 때, 저는 tree라는 명령어를 사용합니다.</h4>
<p>tree는 폴더의 하위 구조를 계층적으로 표시해주어서 전체 디렉토리 구조를 파악할 때 유용하며, -L 옵션을 사용하여 얼마나 자세히 구조를 표현할 지 결정합니다.</p>
</blockquote>
<pre><code class="language-bash">$apt-get install tree</code></pre>
<p>  <img src="https://velog.velcdn.com/images/wogus_93/post/d8213673-4120-456b-bb40-899a94743769/image.png" alt=""></p>
<p>  이런식으로 layter는 conf, recipe, classes, 그리고 이외 항목들을 종류에 맞게 체계적으로 분리하여 좀 더 깔끔하게 yocto를 사용할 수 있게 만들어 줍니다.</p>
<h2 id="create-layer">Create Layer</h2>
<p> 오늘은 이 layer를 직접 만들어보는 시간을 가져보도록 하겠습니다.
  Layer를 만들기 위해 제일 먼저 수행해야 하는 것은 빌드에 대한 기본 환경을 구성해주는 것입니다.
  하는 방법은 다음과 같습니다.</p>
<pre><code class="language-bash">$source oe-init-build-env [build_directory_name]</code></pre>
<p>  <img src="https://velog.velcdn.com/images/wogus_93/post/102ca901-d106-407c-a66f-04dd11315ad4/image.png" alt=""></p>
<p>  이 과정을 통해 build라는 directory가 자동으로 생성되었고 build를 현재 directory로 만들었습니다.
보통 이 작업을 할 때 아무 값도 지정하지 않으면, 다음과 같이 ARM QEMU emulator가 자동으로 생성됩니다.
  <img src="https://velog.velcdn.com/images/wogus_93/post/09756787-6ec3-428d-9a80-9a39d74ae8ad/image.png" alt=""></p>
<p>  이것에 대한 설정은 conf/local.conf에서 확인할 수 있는데 우선 맨 앞에 있는 bblayer.conf부터 순차적으로 살펴보도록 하겠습니다.</p>
<h2 id="bblayerconf">bblayer.conf</h2>
<p>  bblayer.conf는 poky가 build를 진행할 때 어떤 레이어를 사용할 것인지 정의해 주는 공간입니다.</p>
<p>방금 poky 디렉토리에서 봤던 meta, meta-poky, meta-yocto-bsp가 있는 것을 볼 수 있습니다. </p>
<p>개발할 때 필요한 bsp-layer나 custom으로 만든 layer들의 경로들을 여기에 추가해서 사용하시면 됩니다
<img src="https://velog.velcdn.com/images/wogus_93/post/3402b61c-9c36-45aa-b6f6-0d4f427b225d/image.png" alt=""></p>
<h2 id="localconf">local.conf</h2>
<p>  local.conf는 target machine과 crosscompiler와 같은 빌드하는데 필요한 설정들을 해주는 공간입니다.</p>
<p>방금 얘기했던 데로 현재 qemux86-64가 default로 설정되어있으며, target을 바꾸고 싶다면 해당 machine에 있는 주석을 해제해서 사용하시면 됩니다.
  <img src="https://velog.velcdn.com/images/wogus_93/post/3c9259c8-751f-4ba9-8741-0478828ae84c/image.png" alt="">
  Layer를 만드는데 필요한 구성 요소들을 어느 정도 알아본 것 같으니 이제 Layer를 만들어보도록 하겠습니다.</p>
<p>Layer를 만드는 명령어는 다음과 같습니다.</p>
<pre><code class="language-bash">$bitbake-layers create-layer meta-&lt;LAYER NAME&gt;</code></pre>
<p>  <img src="https://velog.velcdn.com/images/wogus_93/post/65a2d471-17ea-456e-9c2f-f9117f98aae5/image.png" alt=""></p>
<p>  meta-test layer를 create 한 후 디렉토리를 확인해보면 실제로 meta-test layer가 디렉토리에 생성되어 있는 것을 확인할 수 있습니다.</p>
<p>  <img src="https://velog.velcdn.com/images/wogus_93/post/e90963d0-f96d-42a3-9c02-bc4c0ead26ec/image.png" alt=""></p>
<p>  그 다음 할 작업은 생성한 layer를 mybuild/conf/bblayer.conf에 추가하는 것입니다.</p>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/d110ba8e-501c-4d66-85a8-54827714ba3b/image.png" alt=""></p>
<p>  layer가 잘 추가되었는지 확인해보려면 example recipe를 사용하면 됩니다. example recipe는 layer를 생성하면서 자동으로 생기며, bitbake test를 할 때 사용합니다.</p>
<p>  <img src="https://velog.velcdn.com/images/wogus_93/post/574e6d53-a3c3-4b66-9bc8-e745bc440ffb/image.png" alt=""></p>
<p>  문제 없이 bitbake가 완료 되었다면 성공적으로 layer가 구성된 것입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ubuntu 22.04 한글 입력 안되는 에러 해결하는 방법]]></title>
            <link>https://velog.io/@wogus_93/ubuntu-22.04-%ED%95%9C%EA%B8%80-%EC%9E%85%EB%A0%A5-%EC%95%88%EB%90%98%EB%8A%94-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@wogus_93/ubuntu-22.04-%ED%95%9C%EA%B8%80-%EC%9E%85%EB%A0%A5-%EC%95%88%EB%90%98%EB%8A%94-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Thu, 06 Jul 2023 16:21:35 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/wogus_93/post/f465302e-6d4a-4619-8874-efadbbe8c260/image.png" alt=""></p>
<blockquote>
<h4 id="ubuntu를-처음에-깔았을-때-분명-한글로-환경설정을-하고-install을-진행했는데-막상-다-깔고-나니-영어로-전부-설정되어-있고-한글은-입력되지도-않아서-고생을-좀-했었습니다">Ubuntu를 처음에 깔았을 때 분명 한글로 환경설정을 하고 Install을 진행했는데, 막상 다 깔고 나니 영어로 전부 설정되어 있고 한글은 입력되지도 않아서 고생을 좀 했었습니다.</h4>
<p>시간이 좀 지나 VMware를 초기화하고 또 같은 문제로 인해 시간을 좀 소비하게 되서, 다른 분들은 좀 더 편하게 작업을 진행하시기를 바라면서 방법을 정리하게 되었습니다.</p>
</blockquote>
<h2 id="ibus-install">ibus install</h2>
<pre><code>$ sudo apt install ibus ibus-hangul</code></pre><h2 id="hangul-font-install">Hangul font install</h2>
<pre><code>$ sudo apt install fonts-noto-cjk</code></pre><h2 id="im-config-file-modify">im-config file modify</h2>
<pre><code>$ sudo vi /etc/default/im-config</code></pre><p><img src="https://velog.velcdn.com/images/wogus_93/post/186e327d-4243-4d53-b861-4b1b26dcd4aa/image.png" alt=""></p>
<p>*<em>IM_CONFIG_DEFAULT_MODE=auto --&gt; IM_CONFIG_DEFAULT_MODE=ibus 로 수정!!
*</em></p>
<h2 id="input-method-setting">Input Method Setting</h2>
<p> im-config를 입력하면 Input Method가 나옵니다.</p>
<p>여기서 ok를 누르다가 Select user configuration이 나오면 ibus를 선택한 후, Ok를 누르고 다 진행했으면 reboot를 진행합니다.</p>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/1f4b8980-e517-4ed7-91cd-6391e4b61f56/image.png" alt=""></p>
<h2 id="ibus-preferences-실행">Ibus Preferences 실행</h2>
<p>Ibus Preferences는 Terminal에서 ibus-setup을 치면 실행됩니다.</p>
<p>Input Method에서 Add --&gt; Korean을 검색한 후, Hangul 아이콘을 클릭해줍니다.</p>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/437401bd-c4e0-470f-8b6e-ef119c3e3abe/image.png" alt=""></p>
<h2 id="setting-한국어로-변경--단축키-지정">Setting 한국어로 변경 / 단축키 지정</h2>
<p>위의 과정을 다 진행하고 나면 우측 상단 바에 ibus 아이콘이 표시되는 것을 볼 수 있을 것입니다.
<img src="https://velog.velcdn.com/images/wogus_93/post/a99a408c-cfea-4b00-b26f-4452e746e417/image.png" alt=""></p>
<blockquote>
<h4 id="단축키를-변경하고-싶다면-setting---keyboards--layout에서-한국어-preferences를-들어가면-원하는-키로-한영-전환키를-등록할-수-있습니다">단축키를 변경하고 싶다면, Setting - Keyboards- layout에서 한국어-Preferences를 들어가면 원하는 키로 한영 전환키를 등록할 수 있습니다.</h4>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/37687b7c-1c08-492c-a877-1c6573167d01/image.png" alt=""></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Docker setting - yocto]]></title>
            <link>https://velog.io/@wogus_93/Docker-setting-yocto</link>
            <guid>https://velog.io/@wogus_93/Docker-setting-yocto</guid>
            <pubDate>Thu, 06 Jul 2023 16:00:50 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/wogus_93/post/d33e70f3-fe35-40c1-a86f-e482ca4179e0/image.png" alt=""></p>
<blockquote>
<h4 id="이전에-만들었던-docker의-환경을-setting하는-시간을-가져보도록-하겠습니다">이전에 만들었던 docker의 환경을 setting하는 시간을 가져보도록 하겠습니다.</h4>
</blockquote>
<h2 id="locale-setting">Locale Setting</h2>
<p>우선 만들어 놓은 container를 update 시켜줍니다.</p>
<pre><code class="language-java">$ apt-get update</code></pre>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/b4f7413c-65a3-4b98-907a-61dd7b79f4ca/image.png" alt=""></p>
<blockquote>
<h4 id="환경을-setting-하기-전에-제일-먼저-해줘야-할것은-locale-설정입니다-locale에-대한-자세한-설명은-아래-포스팅을-참고하시기-바랍니다">환경을 setting 하기 전에 제일 먼저 해줘야 할것은 locale 설정입니다. locale에 대한 자세한 설명은 아래 포스팅을 참고하시기 바랍니다.</h4>
<p><a href="https://velog.io/@wogus_93/Locale">Locale이란?</a></p>
</blockquote>
<p>현재 locale을 보면 아무것도 setting을 안해놓은 상태기 때문에 보이는 것과 같이 텅 비어있습니다. </p>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/723555cd-6289-442b-acb6-7c50bd4a0290/image.png" alt=""></p>
<p>이 비어있는 locale을 원하는 환경에 맞게 setting 해줍니다.</p>
<pre><code class="language-java">$ apt-get install sudo locales vim
$ locale-gen en_US.UTF-8</code></pre>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/c2bf9f5c-ab01-47e9-bb30-6cdedf14792c/image.png" alt=""></p>
<h2 id="package-설치-ubuntu--debian">Package 설치 (Ubuntu / Debian)</h2>
<p>Docker container는 local pc와는 별개로 움직이기 때문에 필요한 package들을 따로 받아줘야 합니다.</p>
<p>저의 경우, 해당 docker를 yocto를 학습하는데 사용할 예정이기 때문에 yocto를 사용하는데 필요한 패키지를 다운받도록 하겠습니다.</p>
<p>해당 command는 다음과 같습니다.</p>
<pre><code class="language-bash">$ apt-get install -y \
    g++ gawk wget git git-core diffstat unzip texinfo \
    gcc-multilib build-essential chrpath socat cpio libncurses5-dev \
    python3 python3-pip python3-pexpect xz-utils debianutils \
    iputils-ping python3-git python3-jinja2 libegl1-mesa \
    libsdl1.2-dev pylint3 make xsltproc docbook-utils locales \
    fop dblatex xmlto xutils-dev autoconf automake libtool \
    libglib2.0-dev libarchive-dev python-git live-build \
    debootstrap qemu-user-static python-pip \
    xterm python3-subunit mesa-common-dev zstd liblz4-tool \
    lib32z1 lib32stdc++6 bc sudo tmux python-crypto</code></pre>
<p>20분정도 기다린 결과, 인스톨이 전부 완료되었습니다.
<img src="https://velog.velcdn.com/images/wogus_93/post/f32c9348-0ec5-41eb-bfae-c4bc5932e543/image.png" alt=""></p>
<h2 id="docker-commit">Docker commit</h2>
<p>자, 이제 지금까지 세팅한 내용들을 다시 이미지화하도록 하겠습니다.</p>
<p>명령어는 다음과 같습니다.</p>
<pre><code class="language-bash">//docker commit &lt;container name&gt; &lt;new docker image name&gt;:&lt;version&gt;
$ docker commit ubuntu jaehyeon</code></pre>
<h2 id="docker-run--exec">Docker run / exec</h2>
<p>이번에 run하는 docker container에는  restart always와 -v 옵션을 추가합니다.</p>
<p>restart 옵션을 줄 경우 docker desktop을 실행시킬 때 마다 항상 container를 같이 띄울 수 있습니다.</p>
<p>v 옵션을 사용하는 이유는  Local과 volume을 공유하기 위해서입니다.</p>
<p>docker container가 volume을 사용하려면 volume을 컨테이너에 마운트 해주는 과정을 진행합니다.</p>
<p>-v 옵션을 통해 이 과정을 진행하는데 :을 구분자로 해서 앞에는 마운트할 volume, 뒤에는 container 내의 경로를 적어주면 됩니다.</p>
<pre><code>// docker run --restart always --name &lt;container name&gt; - v &lt;local location&gt;:&lt;Docker location&gt; -dt &lt;image name&gt;
$ docker run --restart always --name jaehyeon -v /home/jaehyeon/work:/home/jaehyeon/work -dt jaehyeon
</code></pre><p><img src="https://velog.velcdn.com/images/wogus_93/post/e047bb02-11a0-4ab6-a4d1-f036c2a9c738/image.png" alt=""></p>
<p>이제 run한 docker container를 exec 합니다.</p>
<pre><code class="language-bash">$ docker exec -it jaehyeon /bin/bash</code></pre>
<p>보이는 것과 같이 volume이 docker에 잘 마운트 되어 있는 것을 볼 수 있습니다.
<img src="https://velog.velcdn.com/images/wogus_93/post/f0899d79-014a-4d15-81aa-82dc6c916bd1/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Locale]]></title>
            <link>https://velog.io/@wogus_93/Locale</link>
            <guid>https://velog.io/@wogus_93/Locale</guid>
            <pubDate>Thu, 06 Jul 2023 15:37:37 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h4 id="locale이란-각-나라별로-가지고-있는-언어-날짜-등에-관해-같은-프로그램이라도-어떤-방식으로-출력할지-결정하게-해주는-문자열입니다">Locale이란, 각 나라별로 가지고 있는 언어, 날짜 등에 관해 같은 프로그램이라도 어떤 방식으로 출력할지 결정하게 해주는 문자열입니다.</h4>
</blockquote>
<p>한국에서 현재 날짜를 2023년 7월 2일이라고 표현한다면 다른 나라에서는 02/07/2023이라고 표현할 수 있겠죠.</p>
<p>이처럼 개발자가 해당 국가의 출력 형태를 결정해주도록 알려주는 것이 Locale입니다.</p>
<p>한국의 Locale은 보통 ko_KR.UTF-8을 사용합니다.</p>
<h2 id="locale-설정-방법">Locale 설정 방법</h2>
<p>로컬 terminal에서 locale이 어떻게 설정되었는지 확인해 보도록 하겠습니다.</p>
<p>설정을 확인하는 커맨드는 다음과 같습니다.</p>
<pre><code>$ locale</code></pre><p><img src="https://velog.velcdn.com/images/wogus_93/post/29c4acb0-d971-43ca-bcb9-f62b8807ef97/image.png" alt=""></p>
<p>보이는 것과 같이 ko_KR.UTF-8로 설정되어있습니다. </p>
<p>한글로 설정되어있는 locale을 영어로 바꿔보도록 하겠습니다.</p>
<p>우선 영어용 패키지를 설치하겠습니다.</p>
<pre><code class="language-java">$ sudo apt-get install language-pack-en</code></pre>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/dd5dbcd9-bc90-40ab-809f-fc10f12b3ead/image.png" alt=""></p>
<p>영어 패키지의 경우, 보이시는 것과 같이 리눅스를 깔 때 이미 설치되어있는 경우가 많습니다.</p>
<p>패키지가 설치되어있는 것을 확인했으니, 이제 Locale을 설치해줍니다.</p>
<pre><code>$ sudo locale-gen en_US.UTF-8</code></pre><p><img src="https://velog.velcdn.com/images/wogus_93/post/85e30005-61f4-453a-ada7-ec1b468e81b0/image.png" alt=""></p>
<p>generation이 무사히 완료되었습니다.</p>
<p>이 방법 말고도, 직접 locale  파일을 수정해서 설정을 변경하는 방법도 있습니다.</p>
<pre><code>$ vi /etc/default/locale</code></pre><p><img src="https://velog.velcdn.com/images/wogus_93/post/83710d14-ca09-4bcd-b955-e91c325f24b4/image.png" alt=""></p>
<p>해당 값을 변경한 후, reboot을 하면 설정이 제대로 변경되어 있는 것을 확인할 수 있을 것입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Docker install]]></title>
            <link>https://velog.io/@wogus_93/Docker-install</link>
            <guid>https://velog.io/@wogus_93/Docker-install</guid>
            <pubDate>Thu, 06 Jul 2023 15:10:40 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/wogus_93/post/0fe35a3d-b501-44a6-a74d-471fbf0f0c7d/image.png" alt=""></p>
<blockquote>
<h4 id="docker를-install-하는-과정을-다뤄보도록-하겠습니다">Docker를 install 하는 과정을 다뤄보도록 하겠습니다.</h4>
</blockquote>
<h2 id="apt-package-install">Apt package install</h2>
<p> 설치되있는 패키지를 모두 새버전으로 업그레이드 시킨 후 , apt 패키지 설치를 진행합니다.</p>
<pre><code>$ sudo apt-get update
$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release</code></pre><h2 id="docker의-공식-gpg-key-추가">Docker의 공식 GPG Key 추가</h2>
<p>변조된 docker image를 받는 것을 방지하기 위한 공식 GPG Key를 추가합니다.</p>
<pre><code>$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg</code></pre><h2 id="repository-setting">Repository setting</h2>
<pre><code>//arm64

$ echo \
  &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null

//x86,amd64
$ echo \
  &quot;deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
</code></pre><h2 id="docker-engine-install">Docker engine install</h2>
<p>진행한 사항에 대한 update를 진행한 후, 다시 install을 진행하면 도커 설치가 완료됩니다.</p>
<pre><code>$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin</code></pre><p> 간단한 command를 통해 docker가 잘 install 되었는지 확인할 수 있습니다.</p>
<pre><code>$sudo docker run hello-world</code></pre><p><img src="https://velog.velcdn.com/images/wogus_93/post/f433154f-d89d-43ec-965b-ee8e5d864e7f/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Docker run/exec]]></title>
            <link>https://velog.io/@wogus_93/Docker-runexec</link>
            <guid>https://velog.io/@wogus_93/Docker-runexec</guid>
            <pubDate>Thu, 06 Jul 2023 14:55:42 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/wogus_93/post/06d30a24-71eb-4783-b7de-3cc9b219235f/image.png" alt=""></p>
<blockquote>
<h4 id="docker를-만드는-과정을-진행하기에-앞서서-docker는-대체-왜-사용하는-걸까요">docker를 만드는 과정을 진행하기에 앞서서 docker는 대체 왜 사용하는 걸까요?</h4>
</blockquote>
<p>docker를 사용하는 주된 이유는 개발환경을 이미지화 시켜서 개발 및 배포 환경을 컨테이너화 할 수 있기 때문입니다.</p>
<p>개발을 하다 보면 분명히 내 자리에서 빌드가 잘 되는 것을 확인하고 팀원들에게 배포를 진행했는데, 꼭 한-두명 씩 에러가 나는 경우가 있습니다.</p>
<p>물론 다른 문제로 인해서 에러가 난 경우도 있겠지만, 원인을 분석해보면 플랫폼이나 프레임워크의 버전이 달라서 발생하는 경우가 많습니다.</p>
<p>이것에 대한 해결책으로 저는 docker를 사용하고 있습니다.</p>
<p>팀원들과 같은 버전인  플랫폼, 프레임워크를 이미지에 올려놓고 컨테이너로 만들고 이 컨테이너에서 돌리면 로컬이랑 별개로 독립적으로 작업을 진행할 수 있기 때문에 관련 이슈들을 쉽게 해결할 수 있습니다.</p>
<p>또한, 빌드 중 치명적인 에러가 발생했을 경우에도 그저 관련 컨테이너만 제거하면 되기 때문에 안전성도 보장된다는 장점이 있습니다.</p>
<h2 id="docker-image-pull">Docker image pull</h2>
<p>이제 docker hub 에 있는 ubuntu docker image를 setting해보는 시간을 가져보도록 하겠습니다.</p>
<blockquote>
<h4 id="ubuntu-image의-경우-docker-hub-사이트에-들어가서-ubuntu를-검색해보면-ubuntu-의-버전과-그에-맞는-image들을-쉽게-찾아-볼-수-있습니다">ubuntu image의 경우 docker hub 사이트에 들어가서 ubuntu를 검색해보면 ubuntu 의 버전과 그에 맞는 image들을 쉽게 찾아 볼 수 있습니다.</h4>
<p><a href="https://hub.docker.com/">Docker hub Link</a></p>
</blockquote>
<p>저는 ubuntu 16.04 version image를 받아서 진행하였습니다.</p>
<pre><code class="language-python">$ docker pull ubuntu:16.04</code></pre>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/afd93cf0-9613-4cd2-a844-86030691d518/image.png" alt=""></p>
<p>docker image가 잘 pull 되었는지 확인합니다.</p>
<pre><code class="language-python">$ docker images</code></pre>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/111ac079-d073-4239-aa80-36cbefc031e0/image.png" alt=""></p>
<p>맨 하단에 ubuntu 16.04 image가 생성되어있는 것을 확인할 수 있습니다.</p>
<h2 id="docker-image로--container-run--exec-해보기">Docker image로  container run / exec 해보기</h2>
<p>이제 docker 컨테이너를 run해 보도록 하겠습니다.</p>
<pre><code class="language-python">$ docker run --name &lt;conatiner name&gt; -dit &lt;docker image&gt;</code></pre>
<p>여기서 사용하는 옵션은 다음과 같습니다.</p>
<h4 id="--name--container-name">--name : container name</h4>
<h4 id="-d--background에서-사용합니다">-d : background에서 사용합니다.</h4>
<h4 id="-it--컨테이너를-종료하지-않은-채로-터미널의-입력을-계속-컨테이너로-전달하기-위해-사용해야-하는-옵션입니다">-it : 컨테이너를 종료하지 않은 채로 터미널의 입력을 계속 컨테이너로 전달하기 위해 사용해야 하는 옵션입니다.</h4>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/5e877cd2-1aaf-4e7c-8b76-44bc672195e2/image.png" alt=""></p>
<p>container가 잘 생성되었는지 확인합니다.</p>
<pre><code class="language-python">$ docker ps</code></pre>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/4f92b760-51c4-41d4-8d9f-82cfb42352f0/image.png" alt=""></p>
<p>run 하고 있는 container에 접속하는 command는 다음과 같습니다.</p>
<pre><code class="language-python">$ docker exec -it [container id] /bin/bash</code></pre>
<p>hostname이 해당 container id로 바뀐 것을 볼 수 있습니다. </p>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/eaef1936-f4ae-46fd-b524-eeeef738a908/image.png" alt=""></p>
<h2 id="docker-stop--kill">docker stop / kill</h2>
<p>exit 명령을 통해 접속 종료가 가능하며, docker container를 종료하는 명령어는 다음과 같습니다.</p>
<pre><code class="language-python">$ docker stop [container id] // 해당 컨테이너 종료
$ docker kill [container id] // 해당 컨테이너 강제 종료
</code></pre>
<p><img src="https://velog.velcdn.com/images/wogus_93/post/1a9cde31-d006-4d2e-a971-d54d3d589f4f/image.png" alt=""></p>
<p>보이는 것 과 같이 실행 중이었던 container가 내려간 것을 볼 수 있습니다.</p>
<p>docker kill command를 사용할 경우, 말 그대로 container가 강제 종료가 되는 것이기 때문에, 이후에 사용할 때 conflict error가 발생할 수 있습니다. </p>
<p>따라서, 심각한 문제로 강제 종료하는 경우가 아닐 경우 왠만하면 docker stop으로 container를 종료하는 것이 좋습니다.</p>
<h2 id="docker-restartremove-image">Docker restart/remove image</h2>
<p>docker restart는 종료한 container를 다시 시작하게 해주는 명령어이며, docker container 및 image를 지우는 명령어는 다음과 같습니다.</p>
<pre><code class="language-python">$ docker restart [container id] // 해당 컨테이너 다시 시작
$ docker rm //conatiner 삭제
$ docker rmi //image 삭제</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Docker - Container]]></title>
            <link>https://velog.io/@wogus_93/Docker-Container</link>
            <guid>https://velog.io/@wogus_93/Docker-Container</guid>
            <pubDate>Mon, 29 May 2023 11:36:27 GMT</pubDate>
            <description><![CDATA[<p>Docker는 애플리케이션 구축, 구현 및 테스트를 위해, 격리된 가상화 환경을 생성하는 서비스형 플랫폼을 말합니다. 여기서 말하는 격리된 가상화된 환경이란 무엇일까요?</p>
<p>격리된 가상화된 환경이란, OS를 가상화 시키는 것이 아닌 프로세스를 분리하여 독립적으로 실행할 수 있게 해주는 환경을 말하며, 여기선 Container라고 부릅니다.</p>
<p>Container의 대표적인 예로는 LXC(Linux Container)가 있습니다. LXC는 물리적 자원을 관리하는 Kernel space와 User process(Application)을 실행하는 User space로 나뉩니다. 
<img src="https://velog.velcdn.com/images/wogus_93/post/9d07b1f9-f27d-46ba-959d-beb2011f6ad7/image.png" alt="">
kernel 내부에서는 CPU, Memory를 할당해주는 Cgroups와 namespace를 결합하여 가상화 머신을 시작할 필요없이 고립된 환경을 제공하여 독립적으로 이를 활용할 수 있게 해줍니다.</p>
<p>Docker 또한, 이러한 Linux Container를 기반으로 구축되었으며 Cgroups 및 namespace와 같은 커널의 기능을 사용하여 프로세스를 분리하여 독립적으로 실행할 수 있게 해줍니다.</p>
<p>하지만, Docker는 전통적인 Linux 컨테이너와는 다릅니다. LXC는 경량의 가상화 방법으로 유용했지만 개발자에게 뛰어난 사용자 환경을 제공하지는 못했습니다.
<img src="https://velog.velcdn.com/images/wogus_93/post/0488908c-07ce-450e-a10a-b2dfe83e0cf6/image.png" alt="">
init system을 사용하여 전체 애플리케이션을 하나로 실행할 수 있는 LXC와는 다르게 Docker는 애플리케이션을 개별 프로세스로 세분화시킬 수 있습니다. 이렇게 해줌으로써 Docker는 컨테이너 생성 및 구축, 이미지 전송, version을 관리하는데 좀 더 편리하게 사용할 수 있다는 장점을 가지고 있습니다. </p>
]]></description>
        </item>
    </channel>
</rss>