카테고리 보관물: config

The end of Kubernetes version 1.23 – Ubuntu kubernetes apt install error

2024년 3월 초, docker가 익숙해서 끝까지 버티고 있던 kubernetes v1.23.x 개발 환경 설치에 돌연 문제가 생겼다. Ubuntu에서 kubeadm, kubelet, kubectl 등을 apt로 설치할 수 없게 된 것이다. 원인과 해결 방법에 대해 알아보자.

Kubernetes apt install 에러 현상과 원인

K8s 설치 시 어떤 현상이 발생하는가?

2024년 3월 초부터 ubuntu에 apt install 명령어를 통해 kubeadm, kubelet, kubectl이 설치되지 않는다. 기존 사용하던 개발 환경은 다음과 같다.

OS: jharoian3/ubuntu-22.04-arm64
Kubernetes: 1.23.6-00
Docker: 5:24.0.6-1~ubuntu.22.04~jammy

설치를 위한 명령어는 다음과 같이 사용하고 있었다.

curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt -y install kubelet="$KUBERNETES_VERSION" kubectl="$KUBERNETES_VERSION" kubeadm="$KUBERNETES_VERSION"

위 명령어를 통해 kubernetes 설치를 진행하면, 다음과 같은 에러 메시지를 확인할 수 있다.

master: deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main
master: Hit:1 https://download.docker.com/linux/ubuntu jammy InRelease
master: Hit:3 http://ports.ubuntu.com/ubuntu-ports jammy InRelease
master: Ign:2 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
master: Hit:4 http://ports.ubuntu.com/ubuntu-ports jammy-updates InRelease
master: Err:5 https://packages.cloud.google.com/apt kubernetes-xenial Release
master:   404  Not Found [IP: 142.250.76.142 443]
master: Hit:6 http://ports.ubuntu.com/ubuntu-ports jammy-backports InRelease
master: Get:7 http://ports.ubuntu.com/ubuntu-ports jammy-security InRelease [110 kB]
master: Reading package lists...
master: E: The repository 'https://apt.kubernetes.io kubernetes-xenial Release' does not have a Release file.
master: 
master: WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
master: 
master: Reading package lists...
master: Building dependency tree...
master: Reading state information...
master: E: Unable to locate package kubelet
master: E: Unable to locate package kubectl
master: E: Unable to locate package kubeadm

원인은 package repository에 있다!

위의 에러 메시지를 살펴보면, kubernetes 관련 package 목록을 가져오기 위해 package repository에 접속을 하는데, 404 에러가 발생하고 있음을 알 수 있다. 최근까지 잘 되던 것이 갑자기 되지 않으니까 당황스럽다. 원인은 외부에 있음을 직감하고, kubernetes 공식 문서들을 샅샅이 뒤져보았다.

아니나 다를까, package repository가 대체된다는 안내사항이 있었다. 해당 글에서는 다음과 같이 안내하고 있다.

On behalf of Kubernetes SIG Release, I am very excited to introduce the Kubernetes community-owned software repositories for Debian and RPM packages: pkgs.k8s.io! The new package repositories are replacement for the Google-hosted package repositories (apt.kubernetes.io and yum.kubernetes.io) that we’ve been using since Kubernetes v1.5.

ℹ️ Update (January 12, 2024): the legacy Google-hosted repositories are going away in January 2024. Check out the deprecation announcement for more details about this change.

기존 사용하던 package repository가 2024년 1월부터 아예 사라질 것이라고 되어 있는데, 3월까지 잘 사용한 것도 기적이었던 것이다. 평소 부지런하게 follow up하지 않았던 스스로를 반성하게 된다.

Package repository 관련 문제 해결 방법

Package repository deprecation에 대응하기

안내사항에 따르면, 다음과 같이 package repository를 변경한 후 apt install을 진행하면 된다.

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.23/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.23/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update

그런데, 이렇게 변경 후 테스트해도 여전히 다음과 같은 에러가 발생한다.

master: Reading package lists...
master: E: Failed to fetch https://pkgs.k8s.io/core:/stable:/v1.23/deb/InRelease  403  Forbidden [IP: 54.192.175.103 443]
master: E: The repository 'https://pkgs.k8s.io/core:/stable:/v1.23/deb  InRelease' is not signed.

한 걸음 나아가긴 했다. 404 Not Found 에러 대신 403 Forbidden 에러가 발생하는 것으로 보아, 적어도 새로운 package repository는 서비스를 하고 있긴 하다는 것을 확인할 수 있다. 그렇다면, 왜 이런 현상이 발생하는 것일까? 이 문제에 대한 원인도 앞서 언급한 안내 글에서 찾을 수 있었다.

The new Kubernetes package repositories contain packages beginning with those Kubernetes versions that were still under support when the community took over the package builds. This means that the new package repositories have Linux packages for all Kubernetes releases starting with v1.24.0.

새로운 package repository는 v1.24.0 이상의 kubernetes만 제공한다는 것이다. 결국, kubernetes의 버전을 올려야 한다.

Docker를 버린 kubernetes v1.24로의 여정

Kubernetes v1.23.x와 v1.24.x 사이에는 큰 차이점이 존재한다. Kubernetes v1.24.0부터는 docker를 버렸다는 것이다. 공식 문서의 내용을 간단히 요약하면 다음과 같다.

  • 1.24 버전 이전에는 docker라는 specific한 CRI를 사용하고 있었다.
  • Kubernetes에서 docker 외에도 다양한 CRI를 지원하기 위해, CRI standard라는 것을 만들었다.
  • Docker는 CRI standard를 따르지 않고 있다.
  • Kubernetes는 docker 지원을 위해 dockershim이라는 코드를 만들어서 제공했다.
  • Kubernetes 개발 참여자들이 docker라는 특수 CRI를 위해 별도로 시간을 할애하는 것이 부담스럽다.
  • Kubernetes v1.24부터 dockershim 지원 안하기로 했다.

실제로, kubernetes v1.24 버전을 설치할 때 docker를 사용하려고 하면, 다음과 같은 에러를 만날 수 있다.

master:     [WARNING SystemVerification]: missing optional cgroups: blkio
master: error execution phase preflight: [preflight] Some fatal errors occurred:
master:     [ERROR CRI]: container runtime is not running: output: time="2024-03-05T00:42:52-08:00" level=fatal msg="validate service connection: CRI v1 runtime API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService"
master: , error: exit status 1
master: [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
master: To see the stack trace of this error execute with --v=5 or higher
master: failed to load admin kubeconfig: open /root/.kube/config: no such file or directory
master: To see the stack trace of this error execute with --v=5 or higher

눈물과 함께 kubernetes v1.23과 docker와 작별할 시간이다. 앞서 살펴본 package repository 설정 부분에서 버전을 지정해주는 문자열을 변경하자.

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.24/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.24/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update

이후 apt-cache policy kubeadm 명령어를 통해 설치 가능한 버전을 조회해보고 apt install을 통해 설치를 진행하면 된다. 이때 주의할 점은, docker가 아니라 containerd를 사용할 것이기 때문에 설치하려는 kubernetes 버전과 호환되는 containerd 버전을 알아보고 미리 설치해두어야 한다는 것이다. Containerd와 kubernetes 버전 호환 관계는 이 문서를 확인하면 된다.

최종적으로 정상화한 개발 환경은 다음과 같다.

OS: jharoian3/ubuntu-22.04-arm64
Kubernetes: 1.24.17-1.1
Containerd: 1.7.0

간단하게 요약하면?

요약 정리

  • 현상: ubuntu에 apt install로 kubernetes를 설치할 때, package list를 불러오는 과정에서 에러 발생
  • 원인: 2024년 초부터 버려진 legacy package repository를 참조하고 있을 가능성 있음
  • 해결책: 새로운 package repository로 변경하면 됨

주의사항

  • 새로운 package repository는 kubernetes v1.24.0 이상만 제공
  • Docker를 쓰고 있었다면, containerd같은 다른 CRI로 변경 필요

[Pot Encoder] How to amplify video volume (make only the sound and voice louder)

동영상의 소리만 크게 만들려면 여러 가지 방법이 있지만 인코딩 프로그램 사용하여 쉽게 영상의 손실
없이 소리만 크게 만들 수 있다. (인코딩 프로그램의 Direct Steram Copy 기능 사용)
다음은 팟인코더(PotEncoder)를 사용하여 동영상의 화질손상 없이 소리만 증폭 시키는 방법을 소개
합니다.

1. 팟인코더를 실행 후 편집할 동영상 파일을 선택한다.

– 파일형식은 Default로 정해져 있으니 변환할 파일의 파일형식과 맞춰주면 좋다.

2. 세부설정 버튼을 클릭한다.

3. 비디오 코덱 변경을 변경한다.

 – 환경설정 -> 인코딩 -> 코덱설정 -> 비디오 코덱 -> Direct Steram Copy  선택

 – Direct Steram Copy은 비디오 코덱을 인코딩하지 않고 바로 복사한다는 의미이다.

   (음성만 수정할 때 주로 사용)

4. 오디오 코덱 볼륨을 조정한다.

 – 환경설정 -> 인코딩 -> 코덱설정 -> 오디오 코덱 -> +버튼 클릭

    -> 노멀라이저(Normalizer) 체크박스 클릭 -> 볼륨조정 -> 확인버튼 클릭

5. 인코딩 시작 버튼을 클릭하여 동영상을 인코딩한다.

How to disable packages from automatically updating in Ubuntu

apt-mark 명령어는 패키지의 속성을 변경하는 데 사용됩니다. 주로 패키지를 hold 상태로 설정하거나 해당 설정을 해제하는 데에 사용됩니다.

1. Hold 설정

지정된 패키지를 현재 설치된 버전으로 고정시키고 업그레이드를 방지합니다

sudo apt-mark hold nginx
$ sudo apt-mark hold nginx
nginx set on hold.

2. Hold 상태 확인

Hold로 설정된 패키지 목록을 확인합니다.

sudo apt-mark showhold
$ sudo apt-mark showhold
nginx

3. Hold 해제

Hold 설정을 해제하여 패키지가 다시 업그레이드될 수 있도록 합니다.

sudo apt-mark unhold nginx
$ sudo apt-mark unhold nginx
Canceled hold on nginx.

4. 자동 설치 설정

패키지를 자동 설치로 표시합니다. 이렇게 하면 해당 패키지는 다른 패키지가 삭제될 때 자동으로 제거되지 않습니다.

sudo apt-mark auto nginx
$ sudo apt-mark auto nginx
nginx set to automatically installed.

5. 자동 설치 해제

패키지를 수동 설치로 표시합니다. 이렇게 하면 해당 패키지는 다른 패키지가 삭제될 때 자동으로 제거되지 않습니다.

sudo apt-mark manual nginx
$ sudo apt-mark manual nginx
nginx set to manually installed.

6. 수동 설치 확인

수동 설치된 패키지 목록을 표시합니다.(특정 패키지가 Hold로 설정되어 있는지 확인합니다.)

apt-mark showmanual
$ sudo apt-mark showmanual
nginx
php8.1
php8.1-cli
php8.1-common
php8.1-fpm
php8.1-gd
php8.1-imagick
php8.1-intl
php8.1-mbstring
php8.1-mongodb
php8.1-mysql
php8.1-rdkafka
php8.1-readline
php8.1-redis
php8.1-xml
php8.1-zip
software-properties-common
sudo apt-mark showmanual | grep nginx
$ sudo apt-mark showmanual | grep nginx
nginx
sudo apt-mark showhold | grep nginx
$ sudo apt-mark showhold | grep nginx

7. 자동 설치 확인

자동 설치된 패키지 목록을 표시합니다.

sudo apt-mark showauto
$ sudo apt-mark showauto
adduser
apache2
apache2-bin
apache2-data
apache2-utils
apt
apt-utils
bzip2
ca-certificates
coreutils
dbus
...
util-linux
uuid-runtime
xdg-user-dirs
xz-utils
zlib1g

8. 도움말 표시

apt-mark 명령어의 도움말을 표시합니다.

sudo apt-mark --help
$ sudo apt-mark --help
apt 2.4.11 (amd64)
Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]

apt-mark is a simple command line interface for marking packages
as manually or automatically installed. It can also be used to
manipulate the dpkg(1) selection states of packages, and to list
all packages with or without a certain marking.

Most used commands:
  auto - Mark the given packages as automatically installed
  manual - Mark the given packages as manually installed
  minimize-manual - Mark all dependencies of meta packages as automatically installed.
  hold - Mark a package as held back
  unhold - Unset a package set as held back
  showauto - Print the list of automatically installed packages
  showmanual - Print the list of manually installed packages
  showhold - Print the list of packages on hold

See apt-mark(8) for more information about the available commands.
Configuration options and syntax is detailed in apt.conf(5).
Information about how to configure sources can be found in sources.list(5).
Package and version choices can be expressed via apt_preferences(5).
Security details are available in apt-secure(8).

How to use Oracle dbms_crypto (crypto package library)

오라클 10g 이상에서 사용할 수 있는 DBMS_CRYPTO 패키지를 이용하여 암호화 하는 방법

  1. DBMS_CRYPTO 패키지 생성

설치 되어 있지 않을 경우 다음의 SQL을 수행해서 패키지를 생성한다.

/$ORACLE_HOME/rdbms/admin/dbmsobtk.sql

/$ORACLE_HOME/rdbms/admin/prvtobtk.plb

두 패키지를 추가하는 방법..

A. 오라클 서버에 sysdba으로 접속.

>sqlplus “/ as sysdba”

B. ‘dbmsobtk.sql’ 파일 실행.

리눅스 : @$ORACLE_HOME/rdbms/admin/dbmsobtk.sql;
윈도우 : @%ORACLE_HOME%/rdbms/admin/dbmsobtk.sql;

C. ‘prvtobtk.plb’ 파일 실행.

리눅스 : @$ORACLE_HOME/rdbms/admin/prvtobtk.plb;
윈도우 : @%ORACLE_HOME%/rdbms/admin/prvtobtk.plb;

D. 추가 후 시스템 계정으로만 사용 가능하기 때문에 권한 변경.

이 경우 모두다 실행 가능하도록 하였지만 필요하다면 특정 계정에만 실행권한 주면됨.

grant execute on dbms_crypto to public;

grant execute on dbms_obfuscation_toolkit to public;

 

# 참고) 콘솔에서 실행 전체 과정.

>sqlplus “/ as sysdba”

SQL>

SQL>  @/oracle/rdbms/admin/dbmsobtk.sql

(중간 생략)

No errors.

Synonym created.

SQL>  @/oracle/rdbms/admin/prvtobtk.plb

(중간 생략)

Package body created.

No errors.

SQL> grant execute on dbms_crypto to public;

Grant succeeded.

SQL> grant execute on dbms_obfuscation_toolkit to public;

Grant succeeded.

 

  1. SYS유저에서 사용할 패키지를 생성 .

테스트에서 사용 할 암호 키 값은 ‘12345678‘을 사용한다.

DOWNLOAD SAMPLE SCRIPT : CRYPTO_PACKAGE_CREATE_SCRIPT

CREATE OR REPLACE PACKAGE PKG_CRYPTO
IS
FUNCTION ENCRYPT(INPUT_STRING IN VARCHAR2, KEY_DATA IN VARCHAR2 := ‘12345678’)RETURN RAW;
FUNCTION DECRYPT(INPUT_STRING IN VARCHAR2, KEY_DATA IN VARCHAR2 := ‘12345678’)RETURN VARCHAR2;
END;
CREATE OR REPLACE PACKAGE BODY PKG_CRYPTO
IS
— 에러 발생시에 error code 와 message 를 받기 위한 변수 지정.
SQLERRMSG VARCHAR2(255) ;
SQLERRCDE NUMBER;
— 암호화 함수 선언 key_data 는 입력하지 않을 시에 default 로 12345678 로 지정됨.FUNCTION ENCRYPT(INPUT_STRING IN VARCHAR2
, KEY_DATA IN VARCHAR2 := ‘12345678’
)
RETURN RAW
IS
KEY_DATA_RAW RAW(4000) ;
CONVERTED_RAW RAW(4000) ;
ENCRYPTED_RAW RAW(4000) ;
BEGIN
— 들어온 data 와 암호키를 각각 RAW 로 변환한다.
CONVERTED_RAW := UTL_I18N.STRING_TO_RAW(INPUT_STRING, ‘AL32UTF8’) ;
KEY_DATA_RAW := UTL_I18N.STRING_TO_RAW(KEY_DATA, ‘AL32UTF8’) ;
— DBMS_PKG_CRYPTO.ENCRYPT 로 암호화 하여 encrypted_raw 에 저장.
ENCRYPTED_RAW := DBMS_CRYPTO.ENCRYPT(SRC => CONVERTED_RAW,
— typ 부분만 변경하면 원하는 알고리즘을 사용할 수 있다.
— 단, key value bype 가 다 다르니 확인해야 한다.
TYP => DBMS_CRYPTO.DES_CBC_PKCS5, KEY => KEY_DATA_RAW, IV => NULL) ;
RETURN ENCRYPTED_RAW;
EXCEPTION
WHEN OTHERS THEN
RETURN INPUT_STRING;
END ENCRYPT;FUNCTION DECRYPT(INPUT_STRING IN VARCHAR2
, KEY_DATA IN VARCHAR2 := ‘12345678’
)
RETURN VARCHAR2
IS
CONVERTED_STRING VARCHAR2(4000) ;
KEY_DATA_RAW RAW(4000) ;
DECRYPTED_RAW VARCHAR2(4000) ;
BEGIN
KEY_DATA_RAW := UTL_I18N.STRING_TO_RAW(KEY_DATA, ‘AL32UTF8’) ;
DECRYPTED_RAW := DBMS_CRYPTO.DECRYPT(SRC => INPUT_STRING, TYP => DBMS_CRYPTO.DES_CBC_PKCS5, KEY => KEY_DATA_RAW, IV => NULL) ;
— DBMS_PKG_CRYPTO.DECRYPT 수행 결과 나온 복호화된 raw data 를 varchar2 로 변환하면 끝!
CONVERTED_STRING := UTL_I18N.RAW_TO_CHAR(DECRYPTED_RAW, ‘AL32UTF8’) ;
RETURN CONVERTED_STRING;
EXCEPTION
WHEN OTHERS THEN
RETURN INPUT_STRING;
END DECRYPT;
END;

 

  1. 사용할 유저에게 실행 권한 부여

기본적으로 DBMS_CRYPTO 패키지 권한 만 부여하면 되지만, 혹시 안 될 경우 두 개의 패키지에 대한 사용 권한을 준다.

grant execute on pkg_crypto to USER;

 

  1. 테스트

패키지가 정상적으로 생성되었는지 테스트

SQL> select sys.pkg_crypto.encrypt ( ‘test’ ) from dual ;

A04B686B118AF67B

SQL> select sys.pkg_crypto.decrypt ( ‘A04B686B118AF67B’ ) from dual ;

test

SQL> create table test_crypto (id int , pwd varchar2(64)) ;

SQL> insert into test_crypto values (1, sys.pkg_crypto.encrypt(‘password1’) ) ;

SQL> insert into test_crypto values (2, sys.pkg_crypto.encrypt(‘password2’) ) ;

SQL> commit ;

SQL> select * from test_crypto ;

1        8A65E0E80532B5FADACA597658B8E8E0

2        8A65E0E80532B5FA6635EBCA6EB4D195

SQL> select id , sys.pkg_crypto.decrypt(pwd) from test_crypto ;

1        password1

2        password2

 

  1. 패키지 소스 암호화 (WRAP)

패키지 바디 부분을 SQL 파일로 저장한 후에, 해당 SQL파일을 오라클의 WRAP 명령을 이용하여 소스를 암호화 한다.

암호화된 소스를 이용하여 패키지를 생성한다.

패키지 바디 부분을 pkg_crypto.sql 파일로 만든 후에, WRAP 명령을 이용하여 소스 암호화를 진행 한다.

..\client_1\BIN>wrap iname=pkg_crypto.sql oname=pkg_crypto.plb

PL/SQL Wrapper: Release 19c.0- Production on Wed Sep 14 12:59:27 2019

Copyright (c) 1993, 2019, Oracle. All rights reserved.

Processing pkg_crypto.sql to pkg_crypto.plb

pkg_crypto.plb 파일을 실행 시켜도 되고, 메모장으로 열어서 사용하는 툴에 붙여 넣어서 수행 시켜도 됨.

SQL> select text from dba_source where name = ‘PKG_CRYPTO’;

PACKAGE pkg_crypto

IS

FUNCTION encrypt ( input_string IN VARCHAR2 ) RETURN RAW;

FUNCTION decrypt ( input_string IN VARCHAR2 ) RETURN VARCHAR2;

END pkg_crypto;

 

— pkg_crypto.plb 

PACKAGE BODY pkg_crypto wrapped

a000000

34e

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

b

569 237

ohqkYyNGzuK44ZjD/dc7zE6LBD4wg5VeACDWfC/NR2SlOfdRWqio8BgJ+rTLDeZ0KhuUtwfL

pHsh5UXSmrE5hH7n/MYlulcFuxz+/3JEolt108hdUznBsR865PlC+TBOESlCZ+k6dfP/0AHl

m7ZdffubfOeMEW+6xue2jQP8dS8cEnnuvOBaUG77FS9kmfvhlxjyhQm4lwlnk65byQ4mpm7j

GILd7l4DK2J9rhLoBmcn9GupCftFAI05Ew3eYFuXMfS4NUsCqzdZDLE1ssWoPgFg+nUzSFvF

96FFaMLpCoAYcU9Tq8HdBzHF2Ns/HrqqvzJZx/uPlmo9e4NoSHOonHhr6S2BSS6PXVSXOfeW

dCG489cqwDaf/h2Nxx6WEONFUFoTb7aNG1pvW8Ng5SfDjDYeq4D+lAQA3onCzKeT6/y2hsuA

IJnvdL8FCN3PdeQlz1W8zWexpkBqPyhKvj+RXuuxlTfRnM2voRmdrRch6sSNazdobfnUJOL4

tbN6GdLtMV5ecSORI6U3gkDu9v0wuFojLTjBxLTrCgbIq5AI1x9AOIKC

 

Apache tika를 사용하여 컨텐츠 구문 분석 RESTFul 서버 설치

Java 로 개발된 contents 를 parsing 하는 라이브러리 및 app 으로 command  line 및 GUI 모드로 동작하는 app 와 RESTFul API 로 동작하는 server 가 있습니다.

# 설치

커맨드용 app 는 다음 주소에서 받으면 됩니다.

$ wget http://apache.mirror.cdnetworks.com/tika/tika-app-1.19.jar

standalone 으로 구동하고 RESTFul 로 요청할 수 있는 서버도 있는데 자동화하려면 이게 더 편리하며 아래 주소에서 받으면 됩니다.

$ wget http://apache.mirror.cdnetworks.com/tika/tika-server-1.19.jar

서버로 구동할 경우 처리 결과를 DB 에 남기려면 SQLite JDBC 가 필요하며 아래 라이브러리를 다운받아서 동일한 폴더에 위치시키면 됩니다.

$ wget http://central.maven.org/maven2/org/xerial/sqlite-jdbc/3.23.1/sqlite-jdbc-3.23.1.jar

# 실행

실행은 java -jar 옵션으로 아래처럼 실행하면 됩니다.

App

$ java -jar tika-app-1.19.jar

Server

$ java -jar tika-server-1.19.jar

SQLite JDBC 적용하려면 -cp 옵션을 추가합니다.

$ java -cp . -jar tika-server-1.19.jar

기본 포트는 9998 이며 다른 포트(Ex: 1234)로 구동할 경우 아래와 같이 -p 옵션을 추가합니다.

$ java -cp . -jar tika-server-1.19.jar  -h 0.0.0.0 -p 1234

# 서버 정보

서버로 구동했으면 REST API 로 여러 가지 요청을 할 수 있습니다.

version 확인

$ curl localhost:9998/version

Apache Tika 1.19

detector 확인

$ curl localhost:9998/detectors

# 지원하는 mime type 확인

$ curl localhost:9998/mime-types

# 컨텐츠 parsing

meta 분석

$ curl -T a.pdf localhost:9998/meta

특정 필드가 필요할 경우 url 에 필드명 명시하며 아래는 저자 필드만 추출합니다.

$ curl -T a.pdf localhost:9998/meta/Author
PDF 렌더링 속도를 빠르게 하려면 JDK 8 을 사용하고 JVM 구동시 아래 옵션 추가합니다.
-Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider

# 원하는 형식으로 출력

기존 출력은 text/csv 이며 Accept 헤더에 원하는 포맷을 설정해서 호출하면 됩니다.

XML

$ curl -T a.pdf -H "Accept: application/rdf+xml" localhost:9998/meta

아래는 json 형식으로 결과물을 전달 받습니다.

$ curl -T a.pdf -H "Accept: application/json" localhost:9998/meta

JSON 일 경우 개행을 안 해서 보기가 힘드니 jq 로 포맷팅 하면  결과물이 보기 편해집니다.

$ curl -T a.pdf -H "Accept: application/json" localhost:9998/meta | jq .

Example

$ curl -H "Accept: application/json" localhost:9999/meta -T sample.pdf

 $ curl -H "Accept: text/plain" localhost:9999/tika -T sample.pdf

 $ curl -H "Accept: application/json" localhost:9999/rmeta -T sample.pdf

Automatically deleting logs after a certain period of time in Linux

로그 삭제 스크립트 만들기

vi deleteLog.sh

#!/bin/sh

#생성 된지 7일이 지난 로그를 삭제하는 Script
/usr/bin/find /log/ -type f -mtime +7 -exec rm {} +

:wq!

chmod 744 deleteLog.sh

 

type -f 는 파일만 찾는 Option입니다. 디렉토리를 찾기 위해서는 -d 옵션으로 변경해 주시면 됩니다.

-mtime 옵션은 수정된 날짜 시간 기록을 찾는 옵션입니다.

-ctime 옵션은 생성된 날짜 시간 기록을 찾는 옵션입니다.

-atime 옵션은 읽히거나 실행 됐을때의 기록을 찾는 옵션입니다.

날짜 기준 + 를 – 로 바꾸면 현재 날짜 기준 수정된지 7일 이내 파일들을 찾게됩니다.

 

Crontab에 해당 로그 등록하기 

crontab -e

00 00 * * * /install/cron/deleteLog.sh

:wq!

* 매일 정각에 해당 스크립트가 실행 될 수 있도록 Crontab에 등록 해줍니다.

How to Install macOS Sonoma 14 on VMware Workstation 17

이 문서에서는 Windows 운영 체제에서 VMware Workstation 17 Pro를 사용하여 새 가상 머신에 macOS Sonoma 14를 설치하고 구성하는 방법을 살펴봅니다.

VMware 워크스테이션에 macOS Sonoma 14를 설치하는 방법

iMac, MacBook 또는 MacBook Pro 컴퓨터 사용자는 Apple Store에서 Sonoma 14 업데이트를 다운로드하고 시스템을 쉽게 업데이트할 수 있습니다.

Mac 컴퓨터가 없다고 가정해 보겠습니다. 이 경우 VMware Workstation Pro 가상화 프로그램을 사용하여 Windows 10 또는 Windows 11이 설치된 호스트 컴퓨터에 macOS 14를 설치 하고 Apple의 새로운 시스템을 경험할 수 있습니다.

일반적으로 프로그램이 Apple OS 시스템을 지원하지 않기 때문에 VMware Workstation에 Apple 운영 체제를 설치할 수 없습니다. 그러나 VMware Unlocker를 사용하여 이 지원을 활성화하고 macOS를 잠금 해제할 수 있습니다.

또한 Windows 및 vSphere ESXi 에서 Unlocker 소프트웨어를 사용하여 Apple Mac OS X의 잠금을 해제할 수 있습니다 .

macOS Sonoma용 새 가상 머신을 생성하는 방법

Windows 호스트 컴퓨터에 VMware를 설치한 후 앞서 언급한 대로 Unlocker 도구를 사용하여 게스트 macOS 운영 체제를 설치하고 VM 설정을 올바르게 지정해야 합니다.

1 단계

VMware Workstation 17 Pro를 연 후 메인 화면에서 가상 머신 생성 옵션을 클릭하여 마법사를 엽니다. 새 가상 머신 마법사를 연 후 사용자 지정(고급)을 선택하여 가상 머신 설정을 더 잘 구성하고 다음을 클릭하세요.

사용자 정의 가상 머신 생성

2 단계

가상 머신 하드웨어 호환성 선택 창에서 컴퓨터에 설치된 최신 버전의 VMware Pro를 선택합니다. 이전 시스템 버전을 설치하려고 했는데 오류가 발생했다고 가정해 보겠습니다. 이 경우 호환성 섹션에서 Workstation 버전을 다운그레이드할 수 있습니다.

하드웨어 버전 선택

3단계

게스트 운영 체제 설치 창에서 시스템 설치에 사용할 미디어 유형을 선택할 수 있습니다. 호스트의 물리적 DVD 드라이브를 사용하여 설치하려면 설치 프로그램 디스크 섹션에서 설치 미디어를 선택하거나 설치 프로그램 디스크 이미지 섹션에서 컴퓨터에 다운로드한 ISO 이미지를 가상 머신에 추가 하세요 .

이 단계에서 가상 머신에 ISO 파일을 추가하면 추가된 이미지를 기반으로 macOS 가상 머신의 유형과 설정이 자동으로 결정됩니다. 이 프로세스는 설치에 적합하지 않을 수 있으므로 나중에 운영 체제를 설치하겠습니다를 선택하고 계속해서 수동으로 설정을 구성합니다.

나중에 운영 체제를 설치하겠습니다.

4단계

게스트 운영 체제 선택 창에서 Microsoft Windows, Linux, ESX 또는 기타 플랫폼의 운영 체제를 선택할 수 있습니다. 그래도 여기에는 Apple Mac OS X가 표시되지 않습니다.

가상 머신에 macOS를 설치하려고 하면 Apple Mac OS X 시스템에 대한 지원이 표시되지 않습니다. 따라서 Unlocker를 사용하여 macOS 지원을 활성화해야 합니다.

이 창에서 취소 버튼을 클릭하면 가상 머신 생성 마법사가 닫히고 VMware Workstation 프로그램이 완전히 닫힙니다.

게스트 운영 체제 선택

5단계

VMware Unlocker를 컴퓨터에 다운로드한 다음 zip 파일을 폴더에 추출하고 폴더에 있는 win-install.cmd 파일을 관리자로 실행합니다.

VMware 잠금 해제 설치

6단계

Unlocker 도구를 실행하면 VMware 프로그램의 일부 파일이 자동으로 구성되고 백업됩니다. 또한 VMware Tools(Darwin.iso)가 다운로드되기 시작하여 호스트에서 Apple 운영 체제를 보다 효율적으로 사용할 수 있습니다.

참고 : VMware Tools 파일을 다운로드할 수 없는 경우 이 문서를 방문하여 관련 파일을 컴퓨터에 다운로드하십시오.

VMware 도구 다운로드

7단계

macOS를 잠금 해제하면 이번에는 게스트 운영 체제 선택 창에서 Apple Mac OS X 지원이 활성화된 것을 확인할 수 있습니다.

Apple Mac OS X 플랫폼을 선택한 후 버전 섹션에서 macOS 14를 선택하고 다음을 클릭합니다.

Apple Mac OS X 게스트 운영 체제 선택

8단계

가상 머신에 설치할 시스템 이름을 입력합니다. 설치 위치를 변경한다고 가정해 보겠습니다. 이 경우 찾아보기 버튼을 통해 외부 디스크의 사이트를 지정할 수 있습니다.

호스트 디스크 유형이 SSD 또는 NVMe라고 가정합니다. 이 경우 게스트 머신의 성능을 위해 설치 위치를 변경하지 않고 계속할 수 있습니다.

게스트 시스템 이름 입력

9단계

프로세서 구성 창에서 호스트 컴퓨터의 하드웨어 성능에 따라 가상 프로세서 코어 수를 늘릴 수 있습니다. 프로세서 수를 늘리면 가상 시스템이 안정적으로 작동하지 않을 수 있으므로 macOS 게스트 운영 체제에 가장 적합한 값을 찾아야 합니다.

가상 프로세서 코어 수 늘리기

10단계

마찬가지로 호스트 컴퓨터의 RAM 용량에 따라 macOS VM에 적합한 메모리 값을 구성합니다. 시스템에 16GB RAM이 있는 경우 VM에 8GB의 메모리를 할당할 수 있습니다.

RAM 크기를 VM으로 설정

11단계

NAT를 사용하여 네트워크 유형 설정에서 가상 컴퓨터를 로컬 네트워크에 연결합니다. VM에서 인터넷 연결이 필요하지 않은 경우 호스트 전용을 선택 하거나 네트워크 어댑터를 사용하지 않도록 선택할 수 있습니다.

NAT 어댑터 유형 선택

12단계

I/O 컨트롤러 유형 창에서 기본적으로 선택되고 권장되는 LSI Logic을 진행합니다.

LSI 로직 I/O 컨트롤러 유형 선택

13단계

디스크 유형 창에서 가상 PC의 디스크를 IDE , SCSI , SATA 또는 NVMe로 선택할 수 있지만 설치할 시스템이 지원하는지 확인해야 합니다.

macOS Sonoma는 최신 운영 체제이고 새로운 기술을 지원하므로 NVMe 디스크 유형을 선택하면 가상 머신의 성능을 크게 향상시킬 수 있습니다.

NVMe 가상 디스크 유형 선택

14단계

디스크 선택 창에서 가상 컴퓨터를 위한 새 가상 HDD를 생성하거나, 기존 디스크 파일을 추가하거나, 물리적 디스크를 VM에 직접 탑재할 수 있습니다.

새로 macOS 설치를 위한 새 가상 디스크 생성을 선택하고 다음을 클릭합니다.

새 가상 디스크 생성

15단계

디스크 용량 지정 창에서 Sonoma의 가상 디스크 크기를 100GB로 수정하고 가상 디스크를 호스트의 단일 파일로 백업하도록 선택합니다.

컴퓨터에서 이전 기계 디스크 유형을 사용하는 경우 지금 모든 디스크 공간 할당 옵션을 사용하여 호스트 디스크에서 VM에 대해 100GB의 디스크 공간을 할당할 수 있습니다. 이 옵션을 선택하지 않고 계속 진행하면 가상 머신에 디스크 공간이 필요한 경우 호스트 디스크에서 필요한 길이가 자동으로 할당됩니다.

단일 파일 형식으로 가상 디스크 백업 및 크기 구성

16단계

가상 디스크 파일을 가상 머신 구성 파일이 아닌 다른 위치에 백업한다고 가정해 보겠습니다. 이 경우 이 창에서 해당 위치를 선택할 수 있습니다. 컴퓨터에 두 개 이상의 가상 머신을 설치하는 경우 디스크 파일의 위치를 ​​변경하지 마십시오. 서로 다른 영역에 있는 가상 디스크 파일로 인해 혼동될 수 있습니다.

가상 HDD의 위치

17단계

시스템이 가상 컴퓨터를 생성할 준비가 되면 아래와 같은 요약 창이 나타납니다. 요약 창에서 VM에 대한 모든 설정을 확인한 후 하드웨어 사용자 정의 버튼을 클릭합니다.

가상 하드웨어 사용자 정의

18단계

macOS 가상 시스템의 프로세서 설정을 보고 가상화 엔진 섹션에서 “Intel VT-x 또는 AMD-V/RVI 가상화” 옵션을 활성화합니다.

가상화 기능 활성화

19단계

생성한 게스트 시스템에 macOS Sonoma ISO 파일을 추가하려면 CD/DVD(SATA) 장치의 하드웨어 설정 창에서 ISO 이미지 파일 사용 옵션을 선택하고 찾아보기를 클릭하세요.

컴퓨터에 다운로드한 macOS 14 ISO 파일을 선택 하고 열기를 클릭합니다.

가상 머신에 macOS Sonoma ISO 파일 추가

20단계

macOS 이미지 파일을 게스트 컴퓨터에 추가한 후 디스플레이 설정에서 “3D 그래픽 가속화” 기능을 끄고 창을 닫습니다.

3D 그래픽 가속 비활성화

21단계

게스트 가상 PC의 요약 창을 닫고 계속하세요.

가상 PC 설정 닫기

22단계

Sonoma 가상 머신을 실행하고 설치하기 전에 VMX 파일에 코드를 추가해야 합니다. Workstation Pro의 라이브러리 섹션에서 생성한 VM을 마우스 오른쪽 버튼으로 클릭한 다음 VM 디렉터리 열기를 클릭합니다.

macOS.vmx 파일을 메모장으로 열고 다음 코드를 추가한 후 파일을 저장합니다.

smbios.reflectHost = "TRUE"
hw.model = "MacBookPro14,3"
board-id = "Mac-551B86E5744E2388"
smc.version = "0"

AMD 프로세서 호스트가 있는 경우 VMX 파일에 하단 코드를 추가하고 저장합니다.

smc.version = "0"
cpuid.0.eax = "0000:0000:0000:0000:0000:0000:0000:1011"
cpuid.0.ebx = "0111:0101:0110:1110:0110:0101:0100:0111"
cpuid.0.ecx = "0110:1100:0110:0101:0111:0100:0110:1110"
cpuid.0.edx = "0100:1001:0110:0101:0110:1110:0110:1001"
cpuid.1.eax = "0000:0000:0000:0001:0000:0110:0111:0001"
cpuid.1.ebx = "0000:0010:0000:0001:0000:1000:0000:0000"
cpuid.1.ecx = "1000:0010:1001:1000:0010:0010:0000:0011"
cpuid.1.edx = "0000:0111:1000:1011:1111:1011:1111:1111"
smbios.reflectHost = "TRUE"
hw.model = "MacBookPro14,3"
board-id = "Mac-551B86E5744E2388"

macOS VM에서 VMX 파일로 필요한 코드 입력

23단계

macOS.vmx 파일에 필요한 코드를 추가하고 파일을 저장한 후 가상 컴퓨터를 실행합니다.

가상 컴퓨터 실행

VMware를 사용하여 macOS Sonoma를 설치하는 방법

이 단계까지 VMware를 사용하여 macOS용 새 가상 머신을 생성한 후 시스템 설정을 시작할 수 있습니다.

1 단계

macOS 가상 컴퓨터를 실행한 후 Apple 로고가 나타나면 시스템이 부팅될 때까지 기다립니다.

애플 로고

2 단계

macOS 운영 체제를 사용할 시스템 표시 언어를 선택하고 계속하세요.

시스템 표시 언어 선택

3단계

복구 화면이 나타나면 설치하기 전에 가상 디스크를 포맷해야 하므로 디스크 유틸리티를 엽니다.

디스크 유틸리티

4단계

디스크 유틸리티에서 VMware 가상 NVMe 디스크 미디어를 선택하고 지우기 버튼을 클릭합니다. 선택한 디스크를 포맷하려면 열린 창의 이름 필드에 디스크 이름을 입력하고 APFS 형식을 선택한 다음 지우기 버튼을 다시 클릭하고 프로세스가 완료될 때까지 기다립니다.

  • 이름: macOS
  • 형식: APFS
  • 구성표: GUID 파티션 맵

VMware 가상 NVMe 디스크 미디어 포맷

5단계

가상 디스크를 포맷한 후 macOS Sonoma 설치를 선택하고 계속을 클릭하여 시스템을 설치합니다.

macOS 소노마 설치

6단계

계속을 다시 클릭하여 macOS 설치를 시작합니다.

macOS 설정 시작

7단계

macOS 소프트웨어 설치를 계속하려면 라이센스 계약에 동의하세요.

라이센스 계약 수락

8단계

포맷한 가상 디스크를 선택하고 계속을 클릭합니다.

설치할 디스크 선택

9단계

설정 마법사가 시스템 파일을 macOS 디스크에 복사하는 동안 기다립니다. 진행률 표시줄에는 대략 소요 시간이 표시되지만 호스트 컴퓨터의 성능에 따라 시간이 덜 걸릴 수도 있습니다.

약 18분 남음

10단계

시스템 파일을 복사한 후 게스트 가상 시스템이 다시 시작되고 Apple 로고에서 작동됩니다.

약 28분 남음

11단계

필요한 파일을 복사한 후 국가를 선택하고 국가 또는 지역 선택 화면이 나타나면 계속을 클릭하세요.

당신의 나라를 선택하시오

12단계

쓰기 및 음성 언어 화면에서는 시스템에서 사용하려는 시스템 언어, 키보드 레이아웃 및 시스템 로봇 음성을 변경할 수 있습니다.

말하기 및 쓰기 언어를 선택하세요

13단계

접근성 설정에서 개인적인 필요에 따라 시스템을 맞춤 설정할 수 있습니다. 예를 들어 VoiceOver 화면 읽기 프로그램을 사용하여 파일, 웹 페이지의 텍스트를 말하거나 화면에 나타나는 텍스트를 말할 수 있습니다.

접근성 설정

14단계

Apple은 데이터 및 개인 정보 보호 화면에서 사용자의 최소한의 개인 정보를 사용하고 인권을 존중한다는 점을 분명히 명시합니다. 귀하의 데이터를 수집하는 목적은 Apple 서비스를 개선하고 사용자 경험을 향상시키는 것입니다.

데이터 및 개인 정보 보호 설정

15단계

다른 Mac 또는 Windows 컴퓨터에서 게스트 컴퓨터로 파일과 문서를 전송할 수 있습니다. 나중에 데이터를 전송하여 처음부터 시스템 경험을 얻을 수 있습니다.

마이그레이션 도우미

16단계

Apple ID로 로그인 화면에서 로그인하여 iCloud, App Store 및 기타 Apple 서비스를 사용할 수 있습니다. 따라서 Apple 계정이 없는 경우 이 화면에서 새 Apple 계정을 시작할 수 있습니다.

Apple ID 로그인 건너뛰기

17단계

이용 약관 화면에서 macOS 소프트웨어 라이선스 계약을 읽은 후 동의하세요.

이용약관 수락

18단계

가상 시스템에 대한 새 컴퓨터 계정을 만들고 프로필 사진을 선택하세요.

컴퓨터 계정 만들기

19단계

Apple 지도 및 기타 서비스에 대한 개인화된 사용자 경험을 향상시키기 위해 데이터 사용을 허용하거나 허용하지 않을 수 있습니다. 이 결정은 전적으로 개인적인 것이지만, 귀하의 데이터 및 위치 정보를 Apple과 공유하여 macOS를 더욱 개선하는 데 도움을 줄 수 있습니다.

위치 서비스

20단계

시간대 화면에서 귀하가 거주하거나 가장 가까운 지역을 선택하고 계속하십시오.

시간대 선택

21단계

마찬가지로, 사용하는 애플리케이션에서 발생하는 충돌 및 사용 데이터를 개발자와 공유함으로써 개발자가 사용자를 위한 애플리케이션을 더 많이 개발하도록 도울 수 있습니다.

Apple에 분석 데이터 제출

22단계

스크린 타임을 통해 부모는 모든 연령대의 자녀에 대해 시스템을 더 효과적으로 제어할 수 있습니다. 또한 앱과 웹 페이지에 소요된 시간을 검토할 수도 있습니다. 나중에 이러한 설정을 자세히 구성하려면 나중에 설정을 클릭하고 계속하세요.

macOS 화면 시간 설정

23단계

디자인 선택 화면에서 Sonoma 시스템에 사용하고 싶은 테마를 선택할 수 있습니다. Apple은 사용자에게 Light, Dark 및 Auto의 세 가지 테마 스킨을 제공했습니다.

자동 보기를 사용하기로 선택한 경우, 거주 국가의 시간대에 따라 시스템 보기가 자동으로 밝거나 어두워집니다.

당신의 모습을 선택하세요

24단계

시스템 설정을 조정하고 Apple 로고를 클릭한 후 이 Mac 정보를 통해 macOS 버전을 확인할 수 있습니다.

macOS 버전 확인

macOS에 VMware 도구를 설치하는 방법

VMware와 함께 macOS Sonoma를 설치한 후 전체 화면 해상도와 더 높은 성능으로 게스트 가상 시스템을 사용하려면 VM 도구를 설치해야 합니다.

macOS 게스트 컴퓨터의 경우 어디에서나 VM Tools ISO 파일을 다운로드할 필요가 없습니다. Unlocker 도구를 사용하면 VM 도구(Darwin.iso) 파일이 컴퓨터에 다운로드됩니다.

1 단계

macOS 가상 PC의 도구 메뉴에서 VM / 이동식 장치 / CD/DVD(SATA)로 이동하여 설정을 클릭합니다.

VMware 도구 설치

2 단계

CD/DVD 장치의 상태를 연결됨으로 변경한 후 Unlocker/Tools 폴더에 있는 Darwin.iso 파일을 VM에 추가합니다.

가상 머신에 Darwin.iso 파일 추가

3단계

VM에 ISO 이미지를 탑재한 후 VMware 도구 설치를 두 번 클릭하고 설치를 시작합니다.

VMware Tools 설치 시작

4단계

VMware Tools 설치 관리자 창에서 계속을 클릭하여 설치를 계속합니다.

VMware 도구 설치 프로그램

5단계

설치 대상 위치를 선택해야 하므로 ‘이 컴퓨터의 모든 사용자에 대해 설치’를 선택하고 다시 계속을 클릭합니다.

대상 위치 선택

6단계

VMware Tools는 가상 디스크에서 7.6MB의 디스크 공간을 사용합니다. 설치 위치를 변경하지 마십시오. 표준 설치를 위해서는 설치 버튼을 직접 클릭하세요.

설치 시작

7단계

설치가 시작되면 사용자 계정 비밀번호를 입력하여 마법사를 인증하고 소프트웨어 설치 버튼을 클릭합니다.

macOS 사용자 계정 비밀번호 입력

8단계

이번에 시스템 확장 차단 경고가 표시되면 보안 기본 설정 열기를 클릭하세요.

보안 환경설정 열기

9단계

“개발자 VMware, Inc.의 시스템 소프트웨어가 로드되지 않았습니다.” 경고 옆에 있는 허용 버튼을 클릭합니다.

VMware Inc가 보안 및 개인 정보 설정을 수정하도록 잠금 해제하고 허용

10단계

새 시스템 구성 요소를 적용하려면 시스템을 다시 시작해야 함을 알리는 창에서 지금은 안 함을 클릭합니다.

지금 컴퓨터를 다시 시작하지 않음

11단계

macOS에서 VM Tools 설치를 완료한 후 시스템을 다시 시작합니다.

가상 시스템 다시 시작

12단계

VMware에서 게스트 시스템을 전체 화면 해상도로 사용할 수 있는지, 그래픽 메모리가 3MB가 아닌 128MB인지 확인하세요.

그래픽 메모리 및 전체 화면 해상도 확인

13단계

게스트 컴퓨터를 전체 화면 해상도로 사용하려면 호스트 화면에 따라 워크스테이션 도구 메뉴에서 보기 / 전체 화면을 클릭하세요.

전체 화면 해상도 제어

14단계

Windows 10 호스트 시스템에서 macOS 게스트 시스템으로 파일을 끌어서 놓아 파일을 전송하려고 하면 VMware-tools-daemon 오류가 발생합니다. 이 오류를 해결하려면 시스템 환경설정 열기를 클릭하세요.

호스트와 가상 머신 간 파일 전송 드래그 앤 드롭

15단계

보안 및 개인 정보 보호 설정을 변경하려면 시스템을 다시 잠금 해제하고 접근성 섹션에서 VMware-tools-daemon 구성 요소를 활성화합니다.

VMware-Tools-Deamon 허용

16단계

VMware-tools-daemon 구성 요소를 허용한 후 다시 호스트에서 VM으로 파일을 전송하려고 하면 아래 이미지와 같이 작업이 성공한 것을 확인할 수 있습니다.

드래그 앤 드롭으로 파일 전송 성공

인터넷 연결을 확인하는 방법

게스트의 macOS 컴퓨터에서 모든 설정을 지정한 후 인터넷 연결을 테스트하는 것이 도움이 됩니다. 그렇지 않으면 시스템이나 사용하려는 응용 프로그램에 새 업데이트를 설치할 수 없습니다.

1 단계

터미널을 실행하려면 Windows 키 + Space를 함께 누르고 열린 검색 창에 터미널을 입력한 후 실행하세요.

macOS에서 ping을 수행하려면 터미널에서 ping -c 2 www.google.com 명령을 실행하세요. ping 출력에 TTL=128 값이 표시되면 인터넷에 액세스할 수 있습니다.

터미널을 통해 Google 서버에 핑(Ping)

2 단계

핑이 성공하면 Mac 가상 컴퓨터에서 Safari 웹 브라우저를 열고 Google 홈페이지를 방문하여 연결을 테스트하세요.

Safari로 Google 홈페이지 방문하기

USB 플래시 메모리 사용 방법

VMware Workstation 17 Pro 소프트웨어에 설정된 가상 머신에서 USB 플래시 드라이브를 사용할 수 있습니다. 호스트가 컴퓨터에 USB 디스크를 삽입하자마자 프로그램 창에서 감지된 새 장치가 열리고 장치를 VM이나 호스트에 쉽게 연결할 수 있습니다.

1 단계

Windows 10 호스트 컴퓨터에 USB 플래시 디스크를 삽입합니다 . 새 USB 장치 감지 창이 열리면 가상 머신에 연결 옵션을 선택하고 가상 머신을 선택한 후 확인을 클릭합니다.

macOS VM에 USB 플래시 드라이브 연결

2 단계

macOS에서는 NTFS로 포맷된 플래시 드라이브를 사용할 수 없습니다 . 따라서 USB 스틱을 ExFAT로 포맷하면 도움이 될 것입니다. 디스크 유틸리티를 연 후 외부 섹션에서 플래시 디스크를 마우스 오른쪽 버튼으로 클릭하고 지우기를 클릭합니다.

디스크 포맷 창에서 이름 필드에 이름을 입력하고 포맷 필드에서 ExFAT를 선택한 후 지우기 버튼을 다시 클릭하세요.

플래시 드라이브를 ExFAT로 포맷

3단계

플래시 디스크를 ExFAT로 포맷한 후 데이터를 전송할 수 있습니다.

macOS에서 플래시 메모리 사용량 확인

4단계

이번에는 macOS VM에 연결된 플래시 디스크를 연결 해제하고 호스트에 연결하세요. 이는 Windows가 macOS에서 플래시 드라이브로 전송된 데이터를 볼 수 있는지 테스트하는 것을 목표로 합니다.

VM에서 이동식 장치 제거

5단계

Windows 10 호스트의 내 컴퓨터를 통해 플래시 메모리의 내용을 보면 VM에 생성된 Backup이라는 폴더를 볼 수 있습니다.

호스트를 통해 플래시 디스크의 내용 확인하기

macOS 게스트 머신의 성능을 향상시키는 방법

안타깝게도 macOS 운영 체제를 가상으로 실행하더라도 일부 응용 프로그램이나 게임은 3D 그래픽을 지원하지 않기 때문에 사용할 수 없습니다. 이는 사용되는 가상화 소프트웨어에서 macOS에 대한 3D 그래픽 지원이 없기 때문입니다.

게스트 시스템에 VMware Tools를 설치하면 그래픽 메모리를 3MB에서 128MB로 늘릴 수 있습니다. 그러나 새 컴퓨터를 사용하더라도 이 방법은 작동하지 않습니다.

최소한 소프트웨어 개발자나 Apple 시스템을 경험하고 싶은 사람들에게는 이상적일 수 있습니다. 예를 들어 Intel의 12세대 또는 13세대 프로세서에서도 최신 macOS 버전을 VM과 함께 사용하면 성능 문제가 발생합니다.

시스템의 시각 효과를 변경하거나, 메뉴 전환 효과를 조정하거나, 화면 해상도를 낮추는 등의 작업은 시스템 성능에 약간의 영향을 미칠 수 있습니다.

아래 나열된 코드를 사용하여 시스템 설정을 빠르게 변경할 수 있습니다. 미리 스냅샷 으로 시스템을 백업하는 것을 잊지 마세요 !

  • Dock에 대한 빠른 액세스
sudo defaults write com.apple.dock autohide-time-modifier -float 0.15
  • 시각 효과 끄기
sudo defaults write com.apple.finder DisableAllAnimations -bool true
sudo defaults write com.apple.finder InitialSpringBoardDelay -float 0
  • 스포트라이트 검색 비활성화
sudo mdutil -a -i off
  • 시각 효과의 지연 시간 단축
sudo defaults write -g com.apple.mouse.scaling -float 5.0
sudo defaults write -g com.apple.trackpad.scaling -float 5.0
sudo defaults write -g InitialKeyRepeat -int 15
sudo defaults write -g KeyRepeat -int 2
  • 창 민감도 설정
sudo defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerDrag -bool true
sudo defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerHorizSwipeGesture -int 0
sudo defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerVertSwipeGesture -int 0
  • 드래그 속도 증가
sudo defaults write -g com.apple.trackpad.scaling 2.5
sudo defaults write NSGlobalDomain NSWindowResizeTime -float 0.001
  • 해상도 낮추기
sudo /Library/Application\ Support/VMware\ Tools/vmware-resolutionSet 1920 1080
  • CPU 부하를 줄이기 위해 시각 효과 끄기
sudo defaults write com.apple.universalaccess reduceMotion -bool true
  • Safari에서 시각 효과 끄기
sudo defaults write com.apple.Safari WebKitInitialTimedLayoutDelay 0.25
  • 블루투스 비활성화
sudo defaults write /Library/Preferences/com.apple.Bluetooth.plist ControllerPowerState 0
  • 메뉴 전환 효과 끄기
sudo defaults write NSGlobalDomain NSAutomaticWindowAnimationsEnabled -bool false

관련 기사

1) VirtualBox로 macOS 실행하기
2) ESXi로 macOS 실행하기
3) PlayOnMac 활용하기
4) Mac에서 Wine 활용하기

ESXi – Patch Upgrade(ESXCLI Online Depot)

1. 신규 업데이트 patch가 있는지 검색 (* VMWare 홈페이지 login 필수)

https://customerconnect.vmware.com/patch

신규 등록된 업데이트가 있는지 확인 후 ESXi-7.0U3o-22348816와 같은 버젼 정보 확인(copy)

2. ESXCLI를 사용하여 ESXI 업그레이드
1. ESXi 다이렉트 콘솔(DCUI)에서 시스템 사용자 지정 및 문제 해결 옵션에서 ESXi 셸 을 활성화하고 SSH를 활성화합니다. 기본적으로 ESXi SSH는 사용 하지 못하도록 중지 되어 있습니다.

     2. 웹 브라우저에서 ESXi 호스트의 IP 주소를 입력합니다. ESXi 루트 자격 증명을 사용하여 VMware 호스트 클라이언트에 로그인합니다. VMware 호스트 클라이언트의 웹 인터페이스에서 ESXi에 접속 -> 관리 -> 서비스 -> SSH 시작

3. Putty 등으로 SSH 접속 후 esxcli 수행

esxcli software profile update -p ESXi-7.0U3o-22348816-standard -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml

WMWare 홈페이지에서 검색했던 Patch 명칭 중 “ESXi” ~ “build number :xxxxxxxx” 까지 복사 후 “-standard 붙임. (* ESXi-7.0U3o-22348816-standard )

– 오류 발생시 오류 무시

esxcli software profile update -p ESXi-7.0U3o-22348816-standard -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml --no-hardware-warning --no-sig-check

– 실행 결과

[root@localhost:~] esxcli software vib update -d /vmfs/volumes/datastore3/DATA/ESXI7X/VMware-ESXi-7.0.1-16555998-depot.zip
Installation Result
  Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
  Reboot Required: true
  VIBs Installed: VMW_bootbank_bnxtnet_216.0.50.0-16vmw.701.0.0.16555998, VMW_bootbank_bnxtroce_216.0.58.0-7vmw.701.0.0.16555998, VMW_bootbank_brcmfcoe_12.0.1500.0-1vmw.701.0.0.16555998, VMW_bootbank_elxiscsi_12.0.1200.0-2vmw.701.0.0.16555998, VMW_bootbank_elxnet_12.0.1250.0-5vmw.701.0.0.16555998, VMW_bootbank_i40en_1.8.1.121-1vmw.701.0.0.16555998, VMW_bootbank_iavmd_2.0.0.1055-5vmw.701.0.0.16555998, VMW_bootbank_igbn_0.1.1.0-7vmw.701.0.0.16555998, VMW_bootbank_iser_1.1.0.1-1vmw.701.0.0.16555998, VMW_bootbank_ixgben_1.7.1.28-1vmw.701.0.0.16555998, VMW_bootbank_lpfc_12.6.278.10-8vmw.701.0.0.16555998, VMW_bootbank_lpnic_11.4.62.0-1vmw.701.0.0.16555998, VMW_bootbank_lsi-mr3_7.712.51.00-1vmw.701.0.0.16555998, VMW_bootbank_lsi-msgpt2_20.00.06.00-2vmw.701.0.0.16555998, VMW_bootbank_lsi-msgpt35_13.00.13.00-1vmw.701.0.0.16555998, VMW_bootbank_lsi-msgpt3_17.00.10.00-1vmw.701.0.0.16555998, VMW_bootbank_mtip32xx-native_3.9.8-1vmw.701.0.0.16555998, VMW_bootbank_ne1000_0.8.4-11vmw.701.0.0.16555998, VMW_bootbank_nenic_1.0.29.0-2vmw.701.0.0.16555998, VMW_bootbank_nfnic_4.0.0.44-2vmw.701.0.0.16555998, VMW_bootbank_nhpsa_70.0050.0.100-1vmw.701.0.0.16555998, VMW_bootbank_nmlx4-core_3.19.16.8-2vmw.701.0.0.16555998, VMW_bootbank_nmlx4-en_3.19.16.8-2vmw.701.0.0.16555998, VMW_bootbank_nmlx4-rdma_3.19.16.8-2vmw.701.0.0.16555998, VMW_bootbank_nmlx5-core_4.19.16.8-2vmw.701.0.0.16555998, VMW_bootbank_nmlx5-rdma_4.19.16.8-2vmw.701.0.0.16555998, VMW_bootbank_ntg3_4.1.5.0-0vmw.701.0.0.16555998, VMW_bootbank_nvmxnet3-ens_2.0.0.22-1vmw.701.0.0.16555998, VMW_bootbank_nvmxnet3_2.0.0.30-1vmw.701.0.0.16555998, VMW_bootbank_pvscsi_0.1-2vmw.701.0.0.16555998, VMW_bootbank_qcnic_1.0.15.0-10vmw.701.0.0.16555998, VMW_bootbank_qedentv_3.40.3.0-12vmw.701.0.0.16555998, VMW_bootbank_qfle3_1.0.67.0-9vmw.701.0.0.16555998, VMW_bootbank_qfle3f_1.0.51.0-14vmw.701.0.0.16555998, VMW_bootbank_qfle3i_1.0.15.0-9vmw.701.0.0.16555998, VMW_bootbank_qflge_1.1.0.11-1vmw.701.0.0.16555998, VMW_bootbank_rste_2.0.2.0088-7vmw.701.0.0.16555998, VMW_bootbank_sfvmk_2.4.0.0010-15vmw.701.0.0.16555998, VMW_bootbank_smartpqi_70.4000.0.100-3vmw.701.0.0.16555998, VMW_bootbank_vmkata_0.1-1vmw.701.0.0.16555998, VMW_bootbank_vmkfcoe_1.0.0.2-1vmw.701.0.0.16555998, VMW_bootbank_vmkusb_0.1-1vmw.701.0.0.16555998, VMW_bootbank_vmw-ahci_2.0.5-1vmw.701.0.0.16555998, VMware_bootbank_cpu-microcode_7.0.1-0.0.16555998, VMware_bootbank_elx-esx-libelxima.so_12.0.1200.0-3vmw.701.0.0.16555998, VMware_bootbank_esx-base_7.0.1-0.0.16555998, VMware_bootbank_esx-dvfilter-generic-fastpath_7.0.1-0.0.16555998, VMware_bootbank_esx-ui_1.34.3-16465366, VMware_bootbank_esx-update_7.0.1-0.0.16555998, VMware_bootbank_esx-xserver_7.0.1-0.0.16555998, VMware_bootbank_lsuv2-hpv2-hpsa-plugin_1.0.0-3vmw.701.0.0.16555998, VMware_bootbank_lsuv2-intelv2-nvme-vmd-plugin_1.0.0-2vmw.701.0.0.16555998, VMware_bootbank_lsuv2-lsiv2-drivers-plugin_1.0.0-4vmw.701.0.0.16555998, VMware_bootbank_lsuv2-smartpqiv2-plugin_1.0.0-4vmw.701.0.0.16555998, VMware_bootbank_native-misc-drivers_7.0.1-0.0.16555998, VMware_bootbank_qlnativefc_4.0.3.0-17vmw.701.0.0.16555998, VMware_bootbank_vmware-esx-esxcli-nvme-plugin_1.2.0.38-1vmw.701.0.0.16555998, VMware_bootbank_vsan_7.0.1-0.0.16555998, VMware_bootbank_vsanhealth_7.0.1-0.0.16555998
  VIBs Removed: VMW_bootbank_ata-libata-92_3.00.9.2-16vmw.670.0.0.8169922, VMW_bootbank_ata-pata-amd_0.3.10-3vmw.670.0.0.8169922, VMW_bootbank_ata-pata-atiixp_0.4.6-4vmw.670.0.0.8169922, VMW_bootbank_ata-pata-cmd64x_0.2.5-3vmw.670.0.0.8169922, VMW_bootbank_ata-pata-hpt3x2n_0.3.4-3vmw.670.0.0.8169922, VMW_bootbank_ata-pata-pdc2027x_1.0-3vmw.670.0.0.8169922, VMW_bootbank_ata-pata-serverworks_0.4.3-3vmw.670.0.0.8169922, VMW_bootbank_ata-pata-sil680_0.4.8-3vmw.670.0.0.8169922, VMW_bootbank_ata-pata-via_0.3.3-2vmw.670.0.0.8169922, VMW_bootbank_block-cciss_3.6.14-10vmw.670.0.0.8169922, VMW_bootbank_bnxtnet_20.6.101.7-24vmw.670.3.73.14320388, VMW_bootbank_bnxtroce_20.6.101.0-20vmw.670.1.28.10302608, VMW_bootbank_brcmfcoe_11.4.1078.25-14vmw.670.3.73.14320388, VMW_bootbank_char-random_1.0-3vmw.670.0.0.8169922, VMW_bootbank_ehci-ehci-hcd_1.0-4vmw.670.0.0.8169922, VMW_bootbank_elxiscsi_11.4.1174.0-2vmw.670.0.0.8169922, VMW_bootbank_elxnet_11.4.1097.0-5vmw.670.3.73.14320388, VMW_bootbank_hid-hid_1.0-3vmw.670.0.0.8169922, VMW_bootbank_i40en_1.8.1.9-2vmw.670.3.73.14320388, VMW_bootbank_iavmd_1.2.0.1011-2vmw.670.0.0.8169922, VMW_bootbank_igbn_0.1.1.0-5vmw.670.3.73.14320388, VMW_bootbank_ima-qla4xxx_2.02.18-1vmw.670.0.0.8169922, VMW_bootbank_ipmi-ipmi-devintf_39.1-5vmw.670.1.28.10302608, VMW_bootbank_ipmi-ipmi-msghandler_39.1-5vmw.670.1.28.10302608, VMW_bootbank_ipmi-ipmi-si-drv_39.1-5vmw.670.1.28.10302608, VMW_bootbank_iser_1.0.0.0-1vmw.670.1.28.10302608, VMW_bootbank_ixgben_1.7.1.16-2vmw.670.3.104.16075168, VMW_bootbank_lpfc_11.4.33.26-14vmw.670.3.104.16075168, VMW_bootbank_lpnic_11.4.59.0-1vmw.670.0.0.8169922, VMW_bootbank_lsi-mr3_7.708.07.00-3vmw.670.3.73.14320388, VMW_bootbank_lsi-msgpt2_20.00.06.00-2vmw.670.3.73.14320388, VMW_bootbank_lsi-msgpt35_09.00.00.00-5vmw.670.3.73.14320388, VMW_bootbank_lsi-msgpt3_17.00.02.00-1vmw.670.3.73.14320388, VMW_bootbank_misc-cnic-register_1.78.75.v60.7-1vmw.670.0.0.8169922, VMW_bootbank_misc-drivers_6.7.0-2.48.13006603, VMW_bootbank_mtip32xx-native_3.9.8-1vmw.670.1.28.10302608, VMW_bootbank_ne1000_0.8.4-2vmw.670.2.48.13006603, VMW_bootbank_nenic_1.0.29.0-1vmw.670.3.73.14320388, VMW_bootbank_net-bnx2_2.2.4f.v60.10-2vmw.670.0.0.8169922, VMW_bootbank_net-bnx2x_1.78.80.v60.12-2vmw.670.0.0.8169922, VMW_bootbank_net-cdc-ether_1.0-3vmw.670.0.0.8169922, VMW_bootbank_net-cnic_1.78.76.v60.13-2vmw.670.0.0.8169922, VMW_bootbank_net-e1000_8.0.3.1-5vmw.670.3.112.16701467, VMW_bootbank_net-e1000e_3.2.2.1-2vmw.670.0.0.8169922, VMW_bootbank_net-enic_2.1.2.38-2vmw.670.0.0.8169922, VMW_bootbank_net-fcoe_1.0.29.9.3-7vmw.670.0.0.8169922, VMW_bootbank_net-forcedeth_0.61-2vmw.670.0.0.8169922, VMW_bootbank_net-igb_5.0.5.1.1-5vmw.670.0.0.8169922, VMW_bootbank_net-ixgbe_3.7.13.7.14iov-20vmw.670.0.0.8169922, VMW_bootbank_net-libfcoe-92_1.0.24.9.4-8vmw.670.0.0.8169922, VMW_bootbank_net-mlx4-core_1.9.7.0-1vmw.670.0.0.8169922, VMW_bootbank_net-mlx4-en_1.9.7.0-1vmw.670.0.0.8169922, VMW_bootbank_net-nx-nic_5.0.621-5vmw.670.0.0.8169922, VMW_bootbank_net-tg3_3.131d.v60.4-2vmw.670.0.0.8169922, VMW_bootbank_net-usbnet_1.0-3vmw.670.0.0.8169922, VMW_bootbank_net-vmxnet3_1.1.3.0-3vmw.670.3.104.16075168, VMW_bootbank_nfnic_4.0.0.44-0vmw.670.3.104.16075168, VMW_bootbank_nhpsa_2.0.22-3vmw.670.1.28.10302608, VMW_bootbank_nmlx4-core_3.17.13.1-1vmw.670.2.48.13006603, VMW_bootbank_nmlx4-en_3.17.13.1-1vmw.670.2.48.13006603, VMW_bootbank_nmlx4-rdma_3.17.13.1-1vmw.670.2.48.13006603, VMW_bootbank_nmlx5-core_4.17.13.1-1vmw.670.3.73.14320388, VMW_bootbank_nmlx5-rdma_4.17.13.1-1vmw.670.2.48.13006603, VMW_bootbank_ntg3_4.1.5.0-0vmw.670.3.116.16713306, VMW_bootbank_nvme_1.2.2.28-3vmw.670.3.116.16713306, VMW_bootbank_nvmxnet3-ens_2.0.0.21-1vmw.670.0.0.8169922, VMW_bootbank_nvmxnet3_2.0.0.29-1vmw.670.1.28.10302608, VMW_bootbank_ohci-usb-ohci_1.0-3vmw.670.0.0.8169922, VMW_bootbank_pvscsi_0.1-2vmw.670.0.0.8169922, VMW_bootbank_qcnic_1.0.2.0.4-1vmw.670.0.0.8169922, VMW_bootbank_qedentv_2.0.6.4-10vmw.670.1.28.10302608, VMW_bootbank_qfle3_1.0.50.11-9vmw.670.0.0.8169922, VMW_bootbank_qfle3f_1.0.25.0.2-15vmw.670.3.104.16075168, VMW_bootbank_qfle3i_1.0.2.3.9-3vmw.670.0.0.8169922, VMW_bootbank_qflge_1.1.0.11-1vmw.670.0.0.8169922, VMW_bootbank_sata-ahci_3.0-26vmw.670.0.0.8169922, VMW_bootbank_sata-ata-piix_2.12-10vmw.670.0.0.8169922, VMW_bootbank_sata-sata-nv_3.5-4vmw.670.0.0.8169922, VMW_bootbank_sata-sata-promise_2.12-3vmw.670.0.0.8169922, VMW_bootbank_sata-sata-sil24_1.1-1vmw.670.0.0.8169922, VMW_bootbank_sata-sata-sil_2.3-4vmw.670.0.0.8169922, VMW_bootbank_sata-sata-svw_2.3-3vmw.670.0.0.8169922, VMW_bootbank_scsi-aacraid_1.1.5.1-9vmw.670.0.0.8169922, VMW_bootbank_scsi-adp94xx_1.0.8.12-6vmw.670.0.0.8169922, VMW_bootbank_scsi-aic79xx_3.1-6vmw.670.0.0.8169922, VMW_bootbank_scsi-bnx2fc_1.78.78.v60.8-1vmw.670.0.0.8169922, VMW_bootbank_scsi-bnx2i_2.78.76.v60.8-1vmw.670.0.0.8169922, VMW_bootbank_scsi-fnic_1.5.0.45-3vmw.670.0.0.8169922, VMW_bootbank_scsi-hpsa_6.0.0.84-3vmw.670.0.0.8169922, VMW_bootbank_scsi-ips_7.12.05-4vmw.670.0.0.8169922, VMW_bootbank_scsi-iscsi-linux-92_1.0.0.2-3vmw.670.0.0.8169922, VMW_bootbank_scsi-libfc-92_1.0.40.9.3-5vmw.670.0.0.8169922, VMW_bootbank_scsi-megaraid-mbox_2.20.5.1-6vmw.670.0.0.8169922, VMW_bootbank_scsi-megaraid-sas_6.603.55.00-2vmw.670.0.0.8169922, VMW_bootbank_scsi-megaraid2_2.00.4-9vmw.670.0.0.8169922, VMW_bootbank_scsi-mpt2sas_19.00.00.00-2vmw.670.0.0.8169922, VMW_bootbank_scsi-mptsas_4.23.01.00-10vmw.670.0.0.8169922, VMW_bootbank_scsi-mptspi_4.23.01.00-10vmw.670.0.0.8169922, VMW_bootbank_scsi-qla4xxx_5.01.03.2-7vmw.670.0.0.8169922, VMW_bootbank_sfvmk_1.0.0.1003-7vmw.670.3.104.16075168, VMW_bootbank_shim-iscsi-linux-9-2-1-0_6.7.0-0.0.8169922, VMW_bootbank_shim-iscsi-linux-9-2-2-0_6.7.0-0.0.8169922, VMW_bootbank_shim-libata-9-2-1-0_6.7.0-0.0.8169922, VMW_bootbank_shim-libata-9-2-2-0_6.7.0-0.0.8169922, VMW_bootbank_shim-libfc-9-2-1-0_6.7.0-0.0.8169922, VMW_bootbank_shim-libfc-9-2-2-0_6.7.0-0.0.8169922, VMW_bootbank_shim-libfcoe-9-2-1-0_6.7.0-0.0.8169922, VMW_bootbank_shim-libfcoe-9-2-2-0_6.7.0-0.0.8169922, VMW_bootbank_shim-vmklinux-9-2-1-0_6.7.0-0.0.8169922, VMW_bootbank_shim-vmklinux-9-2-2-0_6.7.0-0.0.8169922, VMW_bootbank_shim-vmklinux-9-2-3-0_6.7.0-0.0.8169922, VMW_bootbank_smartpqi_1.0.1.553-28vmw.670.3.73.14320388, VMW_bootbank_uhci-usb-uhci_1.0-3vmw.670.0.0.8169922, VMW_bootbank_usb-storage-usb-storage_1.0-3vmw.670.0.0.8169922, VMW_bootbank_usbcore-usb_1.0-3vmw.670.0.0.8169922, VMW_bootbank_vmkata_0.1-1vmw.670.0.0.8169922, VMW_bootbank_vmkfcoe_1.0.0.1-1vmw.670.1.28.10302608, VMW_bootbank_vmkplexer-vmkplexer_6.7.0-0.0.8169922, VMW_bootbank_vmkusb_0.1-1vmw.670.3.116.16713306, VMW_bootbank_vmw-ahci_2.0.5-1vmw.670.3.116.16713306, VMW_bootbank_xhci-xhci_1.0-3vmw.670.0.0.8169922, VMware_bootbank_cpu-microcode_6.7.0-3.112.16701467, VMware_bootbank_elx-esx-libelxima.so_11.4.1184.2-3.89.15160138, VMware_bootbank_esx-base_6.7.0-3.116.16713306, VMware_bootbank_esx-dvfilter-generic-fastpath_6.7.0-0.0.8169922, VMware_bootbank_esx-ui_1.33.7-15803439, VMware_bootbank_esx-update_6.7.0-3.116.16713306, VMware_bootbank_esx-xserver_6.7.0-3.73.14320388, VMware_bootbank_lsu-hp-hpsa-plugin_2.0.0-16vmw.670.1.28.10302608, VMware_bootbank_lsu-intel-vmd-plugin_1.0.0-2vmw.670.1.28.10302608, VMware_bootbank_lsu-lsi-drivers-plugin_1.0.0-1vmw.670.2.48.13006603, VMware_bootbank_lsu-lsi-lsi-mr3-plugin_1.0.0-13vmw.670.1.28.10302608, VMware_bootbank_lsu-lsi-lsi-msgpt3-plugin_1.0.0-9vmw.670.2.48.13006603, VMware_bootbank_lsu-lsi-megaraid-sas-plugin_1.0.0-9vmw.670.0.0.8169922, VMware_bootbank_lsu-lsi-mpt2sas-plugin_2.0.0-7vmw.670.0.0.8169922, VMware_bootbank_lsu-smartpqi-plugin_1.0.0-3vmw.670.1.28.10302608, VMware_bootbank_native-misc-drivers_6.7.0-3.89.15160138, VMware_bootbank_qlnativefc_3.1.8.0-5vmw.670.3.73.14320388, VMware_bootbank_rste_2.0.2.0088-7vmw.670.0.0.8169922, VMware_bootbank_vmware-esx-esxcli-nvme-plugin_1.2.0.36-2vmw.670.3.116.16713306, VMware_bootbank_vsan_6.7.0-3.116.16631671, VMware_bootbank_vsanhealth_6.7.0-3.116.16631672
  VIBs Skipped: VMW_bootbank_brcmnvmefc_12.6.278.10-3vmw.701.0.0.16555998, VMW_bootbank_i40iwn_1.1.2.6-1vmw.701.0.0.16555998, VMW_bootbank_icen_1.0.0.8-1vmw.701.0.0.16555998, VMW_bootbank_nvme-pcie_1.2.3.9-1vmw.701.0.0.16555998, VMW_bootbank_nvmerdma_1.0.1.2-1vmw.701.0.0.16555998, VMW_bootbank_qedrntv_3.40.4.0-12vmw.701.0.0.16555998, VMware_bootbank_crx_7.0.1-0.0.16555998, VMware_bootbank_gc_7.0.1-0.0.16555998, VMware_bootbank_loadesx_7.0.1-0.0.16555998, VMware_bootbank_lsuv2-nvme-pcie-plugin_1.0.0-1vmw.701.0.0.16555998, VMware_bootbank_lsuv2-oem-dell-plugin_1.0.0-1vmw.701.0.0.16555998, VMware_bootbank_lsuv2-oem-hp-plugin_1.0.0-1vmw.701.0.0.16555998, VMware_bootbank_lsuv2-oem-lenovo-plugin_1.0.0-1vmw.701.0.0.16555998, VMware_bootbank_vdfs_7.0.1-0.0.16555998, VMware_locker_tools-light_11.1.1.16303738-16555998

– 업데이트 적용 (리부팅)

[root@localhost:~] reboot

4. 드라이버 재설치 또는 업그레이드 진행(필요시에만)

– LSI 드라이버 설치

[root@localhost:/tmp] esxcli software vib install -v /tmp/vmware-esx-provider-lsiprovider.vib
Installation Result
  Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
  Reboot Required: true
  VIBs Installed: LSI_bootbank_lsiprovider_500.04.V0.73-0002
  VIBs Removed: 
  VIBs Skipped:
[root@localhost:~] esxcli software vib update -d /tmp/BCM-lsiprovider_700.00.V0.77-0004_16271874.zip
Installation Result
  Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
  Reboot Required: true
  VIBs Installed: BCM_bootbank_lsiprovider_700.00.V0.77-0004
  VIBs Removed: LSI_bootbank_lsiprovider_500.04.V0.73-0002
  VIBs Skipped: 
[root@localhost:~]

– CIM Provider Package for VMware ESXi 7.0

[root@localhost:~] esxcli software vib update -d /tmp/Broadcom-ELX-CIMProvider_12.6.240.9-01OEM.700.1.0.15525992-signed_component-15920419.zip
Installation Result
  Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
  Reboot Required: true
  VIBs Installed: EMU_bootbank_emulex-cim-provider_12.6.240.9-01OEM.700.1.0.15525992
  VIBs Removed: EMU_bootbank_emulex-cim-provider_12.4.243.7-01OEM.670.0.0.8169922
  VIBs Skipped: 
[root@localhost:~]
[root@localhost:~] esxcli software vib install -v /tmp/vmware-esx-MegaCli-8.07.07.vib --no-sig-check
Installation Result
  Message: WARNING: Only live system was updated, the change is not persistent.
  Reboot Required: false
  VIBs Installed: LSI_bootbank_vmware-esx-MegaCli-8.07.07_8.07.07-01
  VIBs Removed: 
  VIBs Skipped: 
[root@localhost:~]

 

– 결과 확인

[root@localhost:~] esxcli software vib list 
Name                    Version                Vendor Acceptance Level Install Date
----------------------------------------- ------------------------------------ ------ ---------------- ------------
lsiprovider                   700.00.V0.77-0004            BCM   VMwareAccepted  2020-09-07
emulex-cim-provider              12.4.243.7-01OEM.670.0.0.8169922   EMU   VMwareAccepted  2020-02-23
vmware-esx-MegaCli-8.07.07          8.07.07-01                LSI   PartnerSupported 2020-09-07
NVIDIA-kepler-VMware_ESXi_6.5_Host_Driver 367.64-1OEM.650.0.0.4240417      NVIDIA VMwareAccepted  2018-03-23

Windows10 – Raid 0 Configuration using Storage Space

저장소 공간을 이용한 Raid 0은(단순-Simple 유형) 구성을해도 속도 향상이 거의 없어

스팬 볼륨일 거라는 말이 많았죠.

구글링을 해보니 저장소 공간 GUI에서는 제대로된 Raid 0 설정을 할 수 없고 파워쉘을 통해 구성

해야만 되는 거였습니다.

 

저장소 공간의 “Columns”라는 “열” 설정이 동시에 읽기/쓰기를 할수 있는 피지컬 드라이브 숫자

설정인데 GUI에서 2개의 디스크로 단순(Simple) 유형을 만들면 “Columns”이 “1”로 설정되어 속도

향상이 없던거였습니다.  GUI에는 바꿀수있는 옵션이 없습니다.

파워쉘로 “Columns” 를 설정해 만들어주면 Raid 0으로 아주 잘되고 속도 또한 좋습니다.

저장소 공간 Raid 0의 장점은 SSD 트림을 확실하게 지원합니다.

 

디스크관리자와 작업관리자에서 보드내장 Raid 처럼 하나의 드라이브만 표시 되어 관리가 쉽습니다.

데이터 삭제 없이 디스크를 추가할 수 있습니다.

** 디스크 추가는 처음 설정된 “Columns(열)” 수의 배수로 추가해야 되고 “Columns”수는 고정으로 변하지 않습니다.

예를들어 “2열” 설정으로 디스크 2개를 묶었으면 나중에 추가할때 디스크 2개를 추가해야하고(2,4,6,8…)

디스크 4개가 되도 열수는 “2열” 고정이라 2개 묶은 속도만 나옵니다.

속도는 상관 없고 추가 용량만 필요한 상황일때 좋겠죠.

 

이제 만드는 방법입니다.

처음부터 끝까지 파워쉘로만 만드는 방법이 있으나 어려우니 저장소 풀 까지는 GUI에서 만듭니다.

1. 디스크관리자를 실행해 Raid 0으로 묶을 디스크들의 볼륨을 삭제 합니다.

2. 제어판 – 저장소공간 – 새 풀 및 저장소 공간 만들기로 들어갑니다.

e3fd12641178cb89c00b4589ca2d69ce9b7b9006.png

 

3. 드라이브를 선택하고 풀 만들기를 합니다.

9decc1eca47a0227e615d944ac75e70b2473b71f.png

 

* 생성 오류가 나는 경우 디스크 초기화를 합니다. 방법은 관리자모드 파워쉘을 실행하고

Get-PhysicalDisk | ft FriendlyName, SerialNumber, UniqueId -auto

하면 드라이브 목록이 뜹니다.

Reset-PhysicalDisk -FriendlyName “WDC WD20 EZRZ-00Z5HB0”

목록에서  초기화할 디스크의 FriendlyName 을 “WDC WD20 EZRZ-00Z5HB0” 에 적어 초기화합니다.

 

4. 저장소 풀은 만들어 졌으니  “취소” 를 누르고 나갑니다.

6e05bacf1462fb1e65c00fd870ce6c70bb21fc36.png

“저장소 공간 만들기” 누르면 “Columns” “1” 설정으로 바로 만들어져서 전부 삭제하고 다시 해야 됩니다.

 

5. 오른쪽에 “풀 이름 바꾸기”에 들어갑니다. 활성화가 안되어 있으면 “확인” 위에있는 설정변경을 누르면 됩니다.

f7d7964864811c9400b7e002a7d04d7d7a4cb832.png

 

6. 원하는 이름으로 바꾸고 “풀 이름 바꾸기”

bf22a860ee296d552a1086640e4c34ebf1e8a55b.png

 

7. 관리자모드 파워쉘을 열고

New-VirtualDisk -FriendlyName WriteBack -StoragePoolFriendlyName  “NVME”  -NumberOfColumns 2 -Interleave 32768 -ResiliencySettingName simple -UseMaximumSize

입력합니다.

-FriendlyName WriteBack : 만들어질 가상 드라이브(Raid0)의 이름인데 나중에 초기화 해야되니 아무거나 해도 됩니다.

-StoragePoolFriendlyName  “NVME” : 6번에서 바꿔준 이름을 넣습니다.

-Interleave 32768 : 스트라이프 사이즈입니다. 이 옵션을 빼면 저장소 기본 256K로 됩니다. 일반환경에선 64K나 128K 정도가 성능이 가장 좋습니다. 1024를 곱해서 넣어주면 됩니다. 잔파일이 많을수록 작게, 큰파일이 많을수록 크게 잡는게 좋습니다.

저는 잔파일이 아주 많은 스크래치 디스크라 32K로 했습니다.

-NumberOfColumns 2 :  가장 중요한 2열을 쓴다는 설정입니다. 디스크가 3개면 3을 넣어야겠죠.

-ResiliencySettingName simple -UseMaximumSize : 유형을 단순(Raid0)으로, 디스크 크기는 적용할수있는 최대 사이즈로 만듭니다.

 

8. 또 다른 내 경우 4개의 NVMe disk Raid 0 으로 설정하기 위해 아래 설정을 이용

New-VirtualDisk -FriendlyName WriteBack -StoragePoolFriendlyName “NVME” -NumberOfColumns 4 -Interleave 131072 -ResiliencySettingName simple -UseMaximumSize

 

9.제대로 만들어지면 이렇게 나옵니다.

b3f16072b98141be884d50edfab0489fa3d50999.png

 

10. 디스크 관리자를 실행해서 초기화하고 포맷하고 쓰면 됩니다.

9789c1e3cb973b5c127c530acd310fdba43a1253.png

길어보여도 중간에 파워쉘 명령어만 잘 입력하면 쉽게 만들어 집니다.

 

참고 링크

https://answers.microsoft.com/en-us/windows/forum/windows_10-files/storage-spaces-trying-to-create-a-raid-0-with/c440086c-4bb6-410d-9e92-fd98ce6626cc

https://social.technet.microsoft.com/Forums/en-US/322755f0-6a38-49b5-9158-49ae04031098/storage-spaces-only-supports-jbod-and-not-raid0?forum=win10itprovirt

https://www.dell.com/support/manuals/ko-kr/storage-md1420-dsms/dsms_bpg_pub-v2/microsoft-storage-spaces-best-practices?guid=guid-8d032e58-86f2-4d36-9617-7a82596848f5

– 델의 마소 저장소 공간 설명서 인데 여러개의 하드를 묶고 SSD로 캐시를 구성하는 방법까지 잘 나와 있습니다.

———————————————————————————————————————————–

<추가합니다.>

** GUI로 풀생성시 물리섹터가 4K인 디스크들을 묶으면 논리섹터가 4K로 잡힙니다.

데이터 입출력에는 문제가 없으나 프로그램이나 게임 실행시 오류가 날수있습니다.

이럴땐 GUI가 아닌 파워쉘에서 논리섹터를 강제로 512로 잡아 풀을 생성해야 합니다.

물리섹터가 512인 디스크들은 자동 논리섹터 512로 잡힙니다.

 

관리자모드 파워쉘을 실행합니다.

Get-PhysicalDisk | sort-object SlotNumber | select SlotNumber, FriendlyName, Manufacturer, Model, PhysicalSectorSize, LogicalSectorSize | ft

연결된 디스크들의 물리와 논리 섹터를 보여주는 파워쉘 명령어 입니다.

묶을 디스크의 물리섹터가 4K(4096)이고 게임이나 프로그램을 실행한다면 파워쉘로 논리섹터 512로

저장소 풀을 생성합니다.

$PhysicalDisks = (Get-PhysicalDisk -CanPool $True)

풀생성 가능한 디스크들을 보여주고 “$PhysicalDisks” 항목으로 설정.

여기서 보이는 디스크들이 전부 저장소 풀이 됩니다.

New-StoragePool -FriendlyName NVME -StorageSubsystemFriendlyName “Windows Storage*” -PhysicalDisks $PhysicalDisks -LogicalSectorSizeDefault 512

“NVME”라는(원하시는거로 바꿔 주세요.) 새로운 풀을 생성합니다.

-LogicalSectorSizeDefault 512 : 논리섹터 사이즈 512로 설정.

이후 7번 항목 “New-VirtualDisk” 로 저장소 공간을 만들어 주면 됩니다.

프로그램 실행 안하면 물리4k, 논리4K로 쓰는게 속도가 더 빠릅니다.

프로그램이나 게임을 실행한다면 논리섹터 512로 풀을 생성해야 합니다.

전부 그런건 아니지만 일부 게임이나 프로그램에서 논리섹터 4K를 쓰면 오류가 납니다.

물리섹터가 512인 디스크는 논리섹터 4K는 안되고 512만 됩니다.

하드,SSD의 물리섹터는 제품마다 4K, 512 제각각입니다 ㅡㅡ;

 

Docker Root Directory 위치 변경

개발 중인 서버에 접근해보니 루트 디렉토리가 91% 사용 중이었습니다.

(*도커의 루트 디렉토리 증설은 불가피했음.)

초기 설치 시 /var/lib/docker/overlay 디렉토리 경로 그대로 사용

01. 루트 디렉토리 설정 확인하기

docker info | grep Root 명령어로 Docker Root Dir이 /var/lib/docker임을 확인했습니다.

[root@totoli]# docker info | grep Root
 Docker Root Dir: /var/lib/docker

02. 루트 디렉토리 설정 변경하기

도커의 설정은 /etc/docker/daemon.json를 변경하면 됩니다.
json 형식으로 작성하면 되며, data-root 요소를 작성합니다.

[root@totoli]# vi /etc/docker/daemon.json

{
  "data-root": "/docker-data/data"		# 변경하고자 할 디렉토리로 작성합니다.
}

*example mount path : "/docker-data" 
mkdir /docker-data/data
cp -rp /var/lib/docker/* /docker-data/data/

03. 설정 변경 후 도커 재기동하기

[root@totoli]# systemctl restart docker

04. 루트 디렉토리 설정 재확인하기

docker info | grep Root 명령어로 다시 한번 확인합니다.
설정했던 바와 같이 /docker-data/data로 변경됨을 확인할 수 있습니다.

[root@totoli]# docker info | grep Root
 Docker Root Dir: /docker-data/data

/var/lib/docker/~~~에서 /docker-data/data/~~~ 로 변경됨을 확인.

05. 기존 루트 디렉토리 삭제

docker info | grep Root 명령어로 다시 한번 확인합니다.
설정했던 바와 같이 /docker-data/data로 변경됨을 확인할 수 있습니다.

ls /docker-data/data
* 잘 복사된것 확인 후 .

[root@totoli]# rm /var/lib/docker -Rf