Ansible 네트워크 자동화 – 2

앤시블 네트워크 자동화 – 2

Ansible 네트워크 자동화

네트워크 자동화는 기본 앤시블 개념의 잇점이지만, 네트워크 모듈의 작동에는 중요한 차이점이 있다.

Control 노드에서 실행

대부분의 앤시블 모듈과는 달리 네트워크 모듈은 managed 노드에서 실행되지 않는다. 사용자 관점에서 네트워크 모듈은 다른 모듈처럼 작동한다. 그것은 ad-hoc 명령, playbook과 role을 가지고 작동한다.
그 이면에서 네트워크 모듈은 다른 (리눅스/유닉스 윈도우) 모듈과 다른 방법을 사용한다. 앤시블은 파이썬으로 작성되고 실행되기 때문에, 네트워크 장비에서 파이썬 실행을 할수 없으므로, 앤시블 네트워크 모듈은 control 노드에서 ansible 이나 ansible-playbook을 실행하는것으로 실행된다.

다양한 통신 프로토콜(multiple communication protocol)

managed 노드 대신 control 노드에서 네트워크 모듈이 실행되기 때문에, 다양한 통신 프로토콜을 지원해야한다.
네트워크 모듈에 선택된 통신 프로토콜(XML over SSH, CLI over SSH, API over HTTPS)은 모듈의 의도와 플랫폼에 따라 다르다.
어떤 네트워크 모듈은 하나의 프로토콜만 지원하며, 어떤 모듈은 프로토콜을 선택할 수 있다.
가장 일반적인 통신 프로토콜은 CLI over SSH 이다.
통신 프로토콜은 ansible_connection 변수로 설정한다.

Continue reading

Ansible 네트워크 자동화 – 1

앤시블(Ansible) 네트워크 자동화 – 1

앤시블 기초

Ansible은 IT 자동화 도구이며, 기본적으로 ssh 프로토콜을 이용한다. 또한 데몬이 실행되지도 않는다.

참고:  SF 소설에서의 Ansible –  앤시블은 원래 SF 소설에서 초광속 실시간 통신을 위한 개념으로 사용했다. 1966년  Ursula K. Le Guin의 소설에서 Ansible이란 단어를 처음 사용했다고 한다. Orson Scott Card의  소설 엔더스 게임이나 듀나의 소설 대리전에서도 앤시블 통신을 사용하는 것을 볼 수 있다.

앤시블 구성

Control Node
ansible이 설치되어 있는 어떤 기계들도 control node가 될 수 있다. control node에서 anaible이나 ansible-playbook 명령을 실행한다. 파이썬이 설치된 어떤 컴퓨터든 control node로 사용할 수 있지만, 윈도우가 설치된 기계는 control node로 사용할 수 없다. 또한 control node를 여러개 가질 수도 있다.

Managed Node
Ansible이 관리하는 네트워크 장치들이나 서버들. Managed node는 때대로 host 라 부르기도 하며, managed node에는 ansible을 설치하지 않는다.

Inventory
Managed node의 목록. 인벤토리 파일은 때때로 hostfile 이라 부른다. inventory 파일은 각 managed node의 정보(ip 주소 등)가 명시된다. managed node를 그룹으로 만들고 중첩시킬 수도 있다.

Collection
collection은 playbook, role, module, plugin을 포함하는 ansible 콘텐츠의 배포 포맷이다. ansible galaxy를 통해 collection을 설치하고 사용할 수 있다.

Modules
ansible 실행 코드의 단위. 각 모듈은 특정 용도를 가진다.

Tasks
ansible의 작업 단위. ad-hoc 명령으로 한번의 task를 실행할 수 있다.

Playbook
순서가 지정된 task 리스트가 저장되어 해당 task를 반복 실행할 수 있다. playbook은 변수와 task를 포함할수도 있다. playbook은 YAML로 작성되어 읽고 쓰고 공유하고 이해하기 쉽다.

Continue reading

ssh key exchange method, ciphers 오류 처리.

구형 시스코 네트워크 장비에 ssh 접속했는데, 아래와 같은 오류가 발생함.

$ ssh snowfox@192.168.0.100

Unable to negotiate with 192.168.0.100 port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1

구버전(ssh 6 이하)에서 지원하던 key exchange method를 지원하지 않아서 발생하는 문제로, 홈디렉토리의 .ssh/config 파일이나, /etc/ssh/ssh_config에 아래 내용을 추가하면 된다.

KexAlgorithms +diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1

Continue reading

qemu-kvm Guest VM(윈도우 10)에서 nvidia GPU path through 사용하기.

qemu-kvm Guest VM(윈도우 10)에서 nvidia GPU path through 사용하기.

* 작업환경
Host OS: ubuntu 18.04 (EFI boot)
Guest OS: windows 10
Hypervisor : qemu-kvm

M/B: ASUS WS X299 SAGE
GPU: Gforce RTX2080 TI 4개
MEM: 128GB
CPU: Intel(R) Core(TM) i9-10900X CPU @ 3.70GHz

1. 커널의 iommu 지원 설정

/etc/default/grub 파일에서 아래 내용을 수정 또는 추가한다.

# vi /etc/default/grub
...
GRUB_CMDLINE_LINUX="xhci-hcd.quirks=262144 kvm-intel.nested=1 intel_iommu=on modprobe.blacklist=nouveau"
...

커널에 적용하고 재부팅한다.

# grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg

Continue reading

linux partitionmanager 로 lvm2 다루기.

우분투 리눅스 lvm2 GUI 툴(partitionmanager)

작업 환경:
virtualbox, ubuntu 20.04(server) guest 에서 작업.

사전 준비사항
os disk: /dev/sda
pv: /dev/sdb, /dev/sdc, /dev/sdd

우분투 리눅스에서 세개의 디스크를 partitionmanager를 사용하여 lv로 만들어 사용하려고 한다.
디스크를 parted 명령으로 확인하면, 아래와 같이 Partition Table이 unknown으로 보인다.(한 번도 사용하지 않았으므로)

$ sudo parted -l
[sudo] password for snowfox:
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 17.2GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  2097kB  1049kB                     bios_grub
 2      2097kB  17.2GB  17.2GB  ext4


Error: /dev/sdb: unrecognised disk label
Model: VBOX HARDDISK (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Error: /dev/sdc: unrecognised disk label
Model: VBOX HARDDISK (scsi)
Disk /dev/sdc: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Error: /dev/sdd: unrecognised disk label
Model: VBOX HARDDISK (scsi)
Disk /dev/sdd: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Continue reading

ubuntu 리눅스에 ethminer 설치하기.

ubuntu 18.04 ethminer 설치하기.

ethminer 는 이더리움을 채굴하는 커맨드라인 기반 프로그램이다.

* 사전 준비사항.

nvidia 드라이버 및 cuda 설치가 되어 있어야 한다.
cmake, libdbus-1-dev, build-essential 패키지가 설치되어 있어야한다. 만약 설치되어 있지않다면 설치한다.

# apt install cmake  libdbus-1-dev build-essential

1. repository 추가

# add-apt-repository -y ppa:ethereum/ethereum

2. ethereum 패키지 설치

# apt install ehereum

Continue reading

윈도우10에 WSL2 설치 하기

윈도우10에 WSL(Windows Subsystem for Linux)2 설치하기

관리자권한으로 powershell이나 명령프롬프트를 실행하고 아래 명령으로 wsl을 사용가능하도록 만든다.

PS C:\WINDOWS\system32> dism /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

배포 이미지 서비스 및 관리 도구
버전: 10.0.17763.1518

이미지 버전: 10.0.17763.1637

기능을 사용하도록 설정하는 중
[==========================100.0%==========================]
작업을 완료했습니다.

Continue reading

리눅스 블럭 디바이스 이름 임시 변경(sdb를 sdc로)

리눅스 블럭 디바이스 이름을 임시로 변경하는 방법.

아래와 같이 디스크를 구성해서 사용하던중, 임시로 디스크 하나들 더 붙일 필요가 생겼다.
OS 디스크: /dev/sda (xfs 포맷)
공유디스크 : /dev/sdb (iSCSI 볼륨, lvm 으로 구성)

디스크를 하나 더 붙였는데, 공유디스크가 sdc로 변경되며, 이 때문에 lv를 정상적으로 사용할 수 없는 상태가 되었다.
즉, /dev/sdb를 /dev/sdc로 그리고 /dev/sdc를 /dev/sdb로 바꿔야할 상황이 된 것이다.

# lsscsi
[0:0:0:0]    cd/dvd  VBOX     CD-ROM           1.0   /dev/sr0
[2:0:0:0]    disk    ATA      VBOX HARDDISK    1.0   /dev/sda
[3:0:0:0]    disk    ATA      VBOX HARDDISK    1.0   /dev/sdb
[4:0:0:0]    disk    LIO-ORG  sdisk            4.0   /dev/sdc

Continue reading

Ubuntu 20.04에 nextcloud 설치.

Ubuntu 20.04 (raspberry pi 4)에 nextcloud 설치하기

Raspberry Pi 4를 이용해서 사용할만한 cloud storage를 찾아보다가 IOS와 데스크탑 클라이언트가 제공되는 pydio cells 와 nextcloud를 후보(?)로 올렸다.
pydio cells는 ARM 용으로 컴파일된 패키지를 제공하지 않아서 소스코드를 다운로드 받아 컴파일했으나, 결과가 좋지 않았다.
컴파일은 잘 되었으나, mysql8을 이용한 로그인 과정에서 문제 발생했으며, mysql5.7 버전으로 변경해서 설치했으나 로그인 후 사용이 불가능할 정도로 오류가 발생해서 포기했다.

반면, nextcloud는 시험 사용중에 특별한 문제는 발생하지 않았고, 성능도 크게 떨어지지 않았다.

* 작업환경
Hardware: raspberry pi 4 4GB
OS: ubuntu server 20.04

* 사전 설치
웹서버: apache2
데이타베이스: mysql-8
PHP: 7.4
기타 : nextcloud가 요구하는 php 모듈(https://docs.nextcloud.com/server/20/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation)

1. NextCloud 다운로드
apache2, php7.4, 기타 필요한 패키지는 apt로 설치하였으며, 여기서는 생략한다.

먼저 nextcloud를 설치할 디렉토리를 만들고 다운로드한다. 여기서는 /home/cloud 를 사용한다.

$ sudo -i
# mkdir /home/cloud
# cd /home/cloud
# curl -O https://download.nextcloud.com/server/releases/nextcloud-20.0.4.zip

압축을 해제한다.

# unzip nextcloud-20.0.4.zip

압축해제한 디렉토리 이름을 웹서버에서 설정할 디렉토리 이름으로 변경한다. 여기서는 public_html 로 변경한다.

# mv nextcloud public_html

웹서버가 접근가능하도록 소유권을 변경한다.

# chown -R www-data:www-data /home/cloud

Continue reading

ip 주소를 숫자로 바꾸기 – python ipaddress 모듈.

ip 주소 정렬 문제

ip 주소를 정렬하려고 하면 자릿 수 때문에 원하는 결과가 나오지 않는다.

172.16.10.10
172.16.1.100
172.16.1.1
172.16.1.9
172.16.1.11
172.16.11.100
172.26.11.10

이 내용을 엑셀을 이용하여(또는 리눅스 sort 명령을 이용하여) 정렬하면,

172.16.1.1
172.16.1.100
172.16.1.11
172.16.1.9
172.16.10.10
172.16.11.100
172.26.11.10

처럼, 원하는 결과가 나오지 않는다.

Continue reading