Category: Linux

virsh 를 통해 Ubuntu 20.04 에 console 로 접속하는 방법

KVM 가상화 시스템에서 virsh 를 통해 Ubuntu Guest OS에 Console 로 접속하는 방법은 다양한데 대부분 grub 부팅 옵션을 손보는 것이 였다. 하지만 Ubuntu 20.04 로 넘어오면서 이 방법이 훨씬 간단해 졌다.

먼저 Ubuntu 20.04 Guest 에 접속한 후에 다음과 같이 입력 하면 끝난다.

이렇게 한 후에 KVM 시스템에서 console 접속을 하면 접속이 잘된다.

이 방법은 18.04 에서도 가능하다.

VSCode 폰트 변경하기

VSCode 폰트(font) 변경하기에 대해서 알아본다. 환경도 윈도우즈가 아닌 리눅스(Linux) 에서 VSCode 폰트 변경이다. 리눅스 환경에서 폰트변경은 뭐든 쉬운 일이 아니다.

폰트(font) 알기 – fc-list

리눅스에서 폰트는 fc-list 명령어를 통해서 알 수 있다.

결과를 보면 다음과 같은 정보를 보여준다.

  1. 설치된 폰트 파일(전체 경로 포함)
  2. 폰트 이름.
  3. 스타일. 스타일은 Regular, Bold, Italic 등이다.

옵션없이 실행하자 설치된 모든 폰트들을 보여준다. 이 명령어에는 필터 기능을 제공한다.

‘:’ 를 기준으로 필터를 줄 수 있다. 필터는 ‘:’ 를 기준으로 연달아 적어주면 되는데 위의 예제는 언어가 ko 인 것만을 보여주도록 옵션을 줬다. 하지만 결과를 보면 중국어, 홍콩, 일본등도 함께 출련된다. 이것은 CJK 폰트의 특성이다. CJK 는 중국어,일본어,한국어만을 따로 모아 놓은 폰트를 말한다.

다음과 같은 필터를 사용할 수 있다.

  1. fc-list : family
  2. fc-list : lang=ko family
  3. fc-list : family style
  4. fc-list –format=”%{family[0]}\n” | sort | uniq

위 보기에서 2번째 명령어를 통해서 한글을 지원하는 폰트를 알아낸다. 나는 “Noto Sans Mono CJK KR” 를 선택했다.

VSCode 폰트 변경

리눅스용 VSCode 는 설정을 열기위한 단축키를 제공하는데, Shift + Ctl + P 를 누르면 된다. 여기서 ‘설정열기(JSON)’ 선택해 자신만의 설정을 커스터마이징 할 수 있다. 폰트 변경은 다음과 같이 했다.

폰트 이름에 공백(Space) 가 들어간 경우에 홑따옴표(‘) 로 감싸준다. 새로운 폰트 이름을 적자마자 바로 적용된다.

Oracle Linux 8 UEK 커널 설치

Oracle Linux 는 UEK(Unbreakable Enterprise Kernel) 라고 해서 커널을 제공 한다. Oracle 은 이를통해 최신의 커널을 제공하고 자신들만의 퍼포먼스 패치를 더해서 고성능을 낼수 있도록 했다. Oracle Linux 8 에서 UEK 커널을 설치해 보자.

Yum Repository 확인

Oracle Linux 8 에는 uek 를 위한 yum repository 가 추가되어 있다. 다음과 같이 확인이 가능하다.

‘ol8_UEKR6’ 가 uek 를 위한 저장소(repository) 이다. 이제 다음과 같이 어떤 버전의 uek 커널이 있는지 다음과 같이 체크해보자.

현재 시점에서 5.4 버전의 uek 커널이 있음을 알 수 있다.

시스템 커널 유지 개수

yum 은 자동으로 패키지를 설치해주고 더 이상 필요없는 패키지는 삭제해주며, 의존성도 함께 해결해준다. 커널의 경우에는 버전마다 설치가 되는데 이렇게 되면 아주 많은 커널이 설치가되어서 부팅시 많은 커널들이 보이게 된다.

이런문제를 해소하기 위해서 yum 은 같은 패키지의 경우에 다양한 버전에 한해서 몇개까지 유지할지 개수를 제한하는데 이것이 ‘installonly_limit’ 이다. 이는 다음과 같이 /etc/yum.conf 파일에 저장된다.

초기값은 3 인데, uek 를 설치하게되면 기본 커널도 삭제될 가능성도 있기 때문에 이것을 5로 교체해준다.

설치

설치는 yum 명령어를 이용해 간단히 다음과 같이 설치 할 수 있다.

자동으로 uek 의 최신 버전을 다운로드 받아 설치해 준다. 재부팅을하면 uek 커널로 올라올 것이다.

Oracle Linux 8.2 설치

Oracle 에서 만들어서 배포하는 Oracle Linux 8.2 를 설치해 본다. 현 시점(2020.07) 에서 최신버전은 Oracle Linux 8.2 이다.

다운로드

Oracle Linux 를 설치를 위해 준비된 이미지는 두가지로 전체 패키지를 담은 DVD 이미지와 Boot 이미지를 제공한다. Boot 이미지는 또 일반 커널과 UEK 커널을 가지는 버전으로 제공한다. 어느걸 하던 상관은 없다.

설치

다운받은 이미지를 USB 나 CD 로 구워서 부팅을 한다.

부팅을 하면 위와 같은 화면이 나온다. 여기서 “Install Oracle Linux 8.2.0” 를 선택해서 설치를 진행한다.

설치는 CentOS 설치 화면과 동일하다. 부팅을 uek boot 이미지를 이용해서 부팅을 했기 때문에 설치를 위한 패키지가 존재하지 않는다. 따라서 반드시 인터넷이 되어야 한다. 그래서 설치할때에 반드시 Network 설정을 먼저해 줘야 한다.

Network 설정

나는 iptime 공유기를 이용하고 있기 때문에 DHCP 만으로 설치하는 Oracle Linux 서버의 ip 설정을 끝냈다. 물론 고정IP 를 설정해도 된다. 일단 인터넷이 되어야 한다.

패키지 저장소 지정.

uek boot 이미지로 부팅을 했기 때문에 패키지를 인터넷을 통해서 다운받아야 한다. 다운받을 주소를 지정해준다. 이 주소는 다음의 링크에서 확인이 가능하다.

위 링크에서 “Installation Media Packages” 에서 BaseOS 8.2 에 x86_64 링크를 클릭해서 나오는 화면에 오른쪽에 Direct Yum Repository URL 주소를 입력해주면 된다.

나머지는 모두 CentOS 설치와 완전히 동일하다. 개인적으로 여기에 Oracle DB 를 설치하고자 파티션을 다음과 같이 나눴다.

  1. / – 40GB
  2. swap – 12GB

Grafana admin password reset

Grafana 는 Time series 데이터베이스에 내용을 그래프로 그려주는 유명한 웹 프로그램이다. 아주 유용한 프로그램으로 인기가 높다.

그런데, 이것을 사용하다가 admin 패스워드를 잊어버렸다면 어떻게 해야할까? 공식 메뉴얼에는 다음과 같이 하라고 나와 있다.

하지만 이렇게 해도 되지 않는다. 이럴때는 다음과 같이 하면 된다.

위 내용은 admin 계정의 패스워드를 ‘admin’ 으로 초기화 시키는 것이다. Grafana 에 접속해 초기화 패스워드를 입력하면 새로운 패스워드를 지정하라는 프로세스를 타게 된다.

Node 설치하기

Node.js 줄여서 Node 는 브라우저에서 탑재되었던 Javascript 엔진을 독립된 애플리케이션으로 만들어 Javascript 를 이용해 애플리케이션을 작성할 수 있도록 해준다.

준비

모르긴 몰라도 Javascript 만큼이나 다이나믹하고 빠르게 변화를 수용하는 언어를 찾기는 쉽지 않다. 그러다보니 이를 지원하는 Node.js 도 다양한 버전이 존재하게 되는데 이러한 다양한 버전을 관리하기 위한 별도의 툴이 필요하게 되었던 모양이다.

Node Version Manager (NVM). Node.js 의 버전을 관리하기 위한 툴로서 이를 이용하면 다양한 버전의 Node.js 를 설치하고 관리할 수 있게 된다.

Node.js 설치는 NVM 을 사용해 할 것이다.

NVM 설치

NVM 의 장점은 대략 다음과 같다.

  • 간단한 명령어로 로컬 계정에 설치가 가능하다.
  • 다양한 버전의 Node.js 를 쉽게 교체 가능하다.
  • Default 버전을 alias 를 통해서 간단하게 지정이 가능하다.

다음과 같이 설치 쉘 스크립트를 다운로드해 실행함으로써 설치는 끝난다.

설치가 끝나면 로그인을 새로하거나 다른 로그인 세션을 열면 된다.

설치가 정상적으로 되었다면 다음과 같이 확인해 볼 수 있다.

Node.js 설치

NVM 을 설치했다면 Node.js 설치는 매우 쉽다.

확인은 역시 버전을 통해서 가능하다.

간단 NVM 사용 방법

NVM 이 설치한 Node.js 를 비롯한 컴포넌트들을 확인하기 위해서는 다음과 같하면 된다.

Node.js 역시 Long Term Support 버전을 지원한다. 이 버전을 설치하기 위해서는 다음과 같이 하면 된다.

이렇게 하면 default 값이 v12.14.1 로 변경된다. 확은은 nvm ls 명령어를 이용한다.

사용하고자하는 버전으로 변경하고 싶다면 use 를 사용하면 된다.

Time-Series data 특징

Time-Series 데이터베이스가 존재한다. InfluxDB, Prometheus 등이 대표적인데 Time-Series 데이터베이스의 특징에 대해서 정리 본다.

  1. High-speed data ingest: ‘고속 데이터 수집’ 으로 번역된다. IoT 사용 사례나 시장 분석 데이터와 같이 꾸준히 고속으로 도착하는 연속된 혹은 한꺼번에 밀려드는 대량의 데이터를 처리해야 한다. 대부분의 솔루션들은 데이터를 24시간 365일 처리하도록 되어 있다.
  2. Immutable data: ‘변경될 수 없는 데이터’ 로 번역된다. Immutable 은 프로그래밍에서도 자주 언급되는 단어다. 데이터베이스에 한번 Insert가 되면 데이터 포인트는 데이터가 만료(expire) 되거나 삭제(delete) 되기전까지 그 어떠한 변경도 일어나지 않는다. 이런 데이터는 전통적으로 timestamp 와 아주 적은 데이터 포인트를 가지는 로그 데이터들이다.
  3. Unstructured labels: Time-series 데이터는 일반적으로 많은 소스들에 의해서 오랜 기간 동안 지속적으로 생산되어진다. 예를들어, Iot 경우에, 모든 센서들은 time-series 데이터의 소스다. 이런 상황에서, 시리즈의 각 데이터 포인트들은 소스 정보와 라벨로 다른 센서의 측정치들을 저장한다. 모든 소스들의 데이터 라벨들은 같은 구조나 순서들을 보장하지 않는다.
  4. Diminishing value over time: ‘시간이 지남에 따라 가치가 낮아진다’ 정도로 번역할 수 있겠다. 적절한 시간 범위를 가진 집계된 요약 데이터만이 미래에 연관성이 있을 수 있다. 1년 후에, 대부분의 사용자들은 마이크로초 단위의 범위에 저장된 모든 데이터 포인트를 필요로하지 않을 것이다. 오직 수분, 수시간, 몇일동안 집계되어지고 정형화된 데이터만이 필요로하게 된다.
  5. Queries are aggregated by time intervals: time-series 데이터에 기반한 차트는 확대/축소를 가능하게 한다. 이건 시간 간격에 의해서 그들이 데이터를 수집함으로써 그렇게 할 수 있다. 전통적으로, time-series 데이터 쿼리는 집계들이다. 이것은 데이터베이스 시스템으로부터 개별적인 레코드들을 검색하는 것과 대비된다.

DNF 사용하기

CentOS 8 로 넘어오면서 기본 패키지 매니지먼트로 dnf 가 되었다. 여전히 yum 을 지원하지만 앞으로는 dnf 로 쭉 간다고 하니 이참에 배워보자고 생각하지만….

겁나 빡치는게, 이제 그만 바꿨으면 한다. 뭔 yum 정도로도 충분히 잘 쓰고 있고 괜찮다고 싶다. 무슨 겁나 가볍네, 더 빠르네 어케 좋네… 응 yum 도 그렇게 느리고 그렇게 무겁지도 않아! 도대체 뭘 할때마다 갈아 엎고 이걸 새로 배우라고 하니.. 뭐 어쩌것나.. 그렇게 하겠다는데, 닥치고 배워야지!

dnf

햐.. 쓰기도 귀찮다… “DNF is the next upcoming major version of YUM, a package manager for RPM-based Linux distributions” 이렇게 맨 페이지에 설명이 나온다.

사용법

사용법은 아주 간단하다. yum 의 기본 사용법은 대동소이하다고 하겠다.

이정도만 알아도 패키지를 다루는데는 문제가 없을 것이다.

Ubuntu, systemd-networkd 전환하기

Ubuntu 16.04 로 넘어오면서 SysV 의 Init 이 Systemd 로 변경되었다. 이런 변화에는 Network 관리에도 적용되고 있는데, 이에 대해서 알아보자.

기존의 Network 관련된, 정확하게는 Network Interface 와 관련된 일은 NetworkManager 가 담당했다. Network Interface 가 무엇인지, 아이피는 DHCP 혹은 Static 인지 등이 그것이다.

하지만 Ubuntu 16.04 로 넘어오면서 시스템에 관련된 일체가 systemd 로 통합되면서 네트워크 관련 작업도 systemd 로 통합되어지게 되는데, 이것이 systemd-networkd 이 이다.

하지만 Ubuntu 18.04 로 넘어온 시점에서도 NetworkManger 는 이전과 호환을 위해서 살려뒀고 살려둔김에 지금도 기본적인 네트워크 설정 프로그램으로 활약(?) 하고 있다.

Network Manager

Network Manager 의 동작은 다음의 명령어로 이루어진다.

관련 설정은 /etc/NetworkManger/NetworkManger.conf 파일이다. 위 프로그램을 실행하게 되면 기본적으로 이 파일을 읽게 되어 있다.

그리고 netplan 설정에서도 NetworkManager 를 기본으로 지정하도록 되어 있다.

Network Manager 비활성화

비활성화는 다음과 같이 하면 된다.

이렇게 하면 네트워크가 비활성화 됨으로 절대로 원격지 서버에서 하면 안된다.

systemd-networkd 활성화

netplan

systemd-networkd 를 활성화하면 이제 네트워크 작업은 netplan 명령어를 통해서 이루어진다. 이 netplan 명령어는 기본적으로 ‘/etc/netplan’ 디렉토리에 파일을 읽어서 네트워크 설정을 적용해 준다.

‘/etc/netplan’ 디렉토리에 설정파일은 기본적으로 yaml 파일형식을 가진다. 예를 들면 다음과 같다.

파일을 수정한 후에는 다음과 같이 명령어만 주면 적용이 된다.

‘–debug’ 는 제외해도 된다.

Ubuntu 18.04, Static IP 할당하기

Ubuntu 18.04 의 경우 네트워크 인터페이스 관련 작업은 netplan 으로 바뀌었다. 만일 Static IP 를 할당하고 싶다면 netplan 의 설정 파일을 수정하고 적용하면 된다.

/etc/netplan/*.yml

여기서 파일을 수정하면 된다. 대략 다음과 같은 포맷을 갖는다.

dhcp4: yes 로 되어 있는 경우에는 DHCP 로 아이피를 받아온다. 하지만 이것을 no 바꾸면 Static IP 를 할당할 수 있다.

netplan 적용

수정을 다 했다면 다음과 같이 적용해 준다.