반응형

 


테스트 및 작성일: 2023년 11월 29일

 

Ubuntu에서 rc.local 초기화 스크립트 활성화하기

 


테스트한 날짜:  2023년 2월 20일

테스트에 사용한 OS:
  - Ubuntu 22.04 
  - CentOS7.9

 

##
##  이해를 돕기 위해 eth0 NIC 포트에 IP address를 설정하는 예시를 들었다.
##

$  sudo -s

$  cat  /etc/rc.local

#!/bin/bash

ifconfig eth0 10.10.2.5/24

route add -net 10.10.2.0/24 gw 10.10.2.1

exit 0

$  chmod +x /etc/rc.local


##
## rc-local.service 설정 파일의 마지막 줄에 [Install] 섹션을 추가한다.
##

$  cat  /lib/systemd/system/rc-local.service
... 중간 생략 ...

[Install]                      ## 이 내용을 추가
WantedBy=multi-user.target     ## 이 내용을 추가
$

##
## 위에서 변경한 내용을 반영하기 위해 데몬을 reload하고, rc-local 서비스를 기동한다.
##

$  systemctl daemon-reload

$  systemctl enable --now rc-local

$  systemctl status rc-local

##
##  잘 설정되었는지 확인하기 위해 OS를 reboot하고, eth0 포트의 IP address 값을 확인한다.
##

$  reboot

... 중간 생략 ...

$  hostname -I

10.10.2.5

$

 

 

 

 

CentOS 7.9 에서 rc.local 초기화 스크립트 활성화하기

CentOS의 rc.local  파일은 /etc/rc.d/rc.local 파일의 Symbolic Link라는 점에서 Ubuntu와 약간 차이가 있다.

이 부분만 주의해서 아래 예제를 따라하면 잘 동작한다.

 

##
##  이해를 돕기 위해 eth0 NIC 포트에 IP address를 설정하는 예시를 들었다.
##

$  sudo -s

$  cat  /etc/rc.local

#!/bin/bash

ifconfig eth0 10.10.2.5/24

route add -net 10.10.2.0/24 gw 10.10.2.1

exit 0

$  chmod 755 /etc/rc.d/rc.local


##
## rc-local.service 설정 파일의 마지막 줄에 [Install] 섹션을 추가한다.
##

$  cat  /lib/systemd/system/rc-local.service
... 중간 생략 ...

[Install]
WantedBy=multi-user.target
$

##
## 위에서 변경한 내용을 반영하기 위해 데몬을 reload하고, rc-local 서비스를 기동한다.
##

$  systemctl daemon-reload

$  systemctl enable --now rc-local

$  systemctl status rc-local

##
##  잘 설정되었는지 확인하기 위해 OS를 reboot하고, eth0 포트의 IP address 값을 확인한다.
##

$  reboot

... 중간 생략 ...

$  hostname -I

10.10.2.5

$

 

 


 

'Ubuntu' 카테고리의 다른 글

KVM의 VM에서 Hugepage 사용하기  (0) 2022.01.13
PCI passthrough on Ubuntu + KVM  (0) 2022.01.12
추가 장착한 Disk Mount  (0) 2021.12.28
Root 계정의 SSH 로그인 허용  (0) 2021.12.28
Install BIND for name server(DNS) on Ubuntu 22.04  (0) 2021.11.05
반응형

 


 

 


블로그 작성 & 테스트한 날짜: 2023년 2월 1일

 

아래 명령 순서를 따라하면, 추가 장착한 disk를 filesystem에 마운트할 수 있다.

 

$  sudo -s

##
## 아래 예제는 /dev/sdb 을 추가로 mount한다고 가정하고 설명하겠다.
##

$  fdisk /dev/sdb

## NOTE  대화형 명령 화면에서 /dev/sdb1 파티션을 생성한다.
## (캡처한 화면이 없어서 자세한 설명은 생략함)



$  fdisk -l

... 중간 생략 ...

Disk /dev/sdb: 232.91 GiB, 250059350016 bytes, 488397168 sectors
Disk model: Samsung SSD 750
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xa8eab75b

Device     Boot Start       End   Sectors   Size Id Type
/dev/sdb1        2048 488396799 488394752 232.9G 83 Linux

... 중간 생략 ...

##
##  새로 장착한 저장 장치를 sdb라고 가정하면, 아래와 같이 ext4 파일 시스템으로 format한다.
##
$  mkfs -t ext4 /dev/sdb1

$  lsblk -f

... 중간 생략 ...

sdb
└─sdb1 ext4     SSD_250G ad6fe291-e588-4376-8638-c4d782e833f8  146.2G    31% /ssd2

... 중간 생략 ...



##
## 마운트 대상 directory를 생성
##
$  mkdir /ssd2

##
## /dev/sdb1 파티션을 /ssd2에 마운트하기
##
$  mount /dev/sdb1 /ssd2

$  df -h /ssd2
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       229G   71G  147G  33% /ssd2

$

 

OS 부팅할 때, volume mount할 수 있도록 /etc/fstab 에 mount 정보를 추가한다.

 

$ ls -lh /dev/disk/by-uuid

total 0
lrwxrwxrwx 1 root root 10 Jan 30 04:41 51234567-1234-1234-abcd-abcdef123456 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Jan 30 04:41 51234567-1234-1234-abcd-abcdef123457 -> ../../sda2

$  cat /etc/fstab

... 중간 생략 ...

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/disk/by-uuid/51234567-1234-1234-abcd-abcdef123456 /         ext4  defaults  0  1
/dev/disk/by-uuid/51234567-1234-1234-abcd-abcdef123457 /mnt/hdd0 ext4  defaults  0  0
/swap.img                                              none      swap  sw        0  0

$

'Ubuntu' 카테고리의 다른 글

PCI passthrough on Ubuntu + KVM  (0) 2022.01.12
rc.local 활성 설정 (Ubuntu, CentOS)  (0) 2021.12.28
Root 계정의 SSH 로그인 허용  (0) 2021.12.28
Install BIND for name server(DNS) on Ubuntu 22.04  (0) 2021.11.05
openssl command example  (0) 2021.11.04
반응형

 

Ubuntu, CentOS  등  Linux OS를 기본 설정으로 설치하면, Root 계정의 SSH login이 금지(Prohibit)된다.

따라서 아래 /etc/ssh/sshd_config 설정 파일의 예제처럼 변경하고 sshd(ssh 서버 데몬)을 restart해줘야 한다.

 

$ cd /root/ssh
$ cat sshd_config

... 중간 생략 ...

PermitRootLogin yes   ## <- 이 설정 부분을 'yes'로 변경한다.

... 중간 생략 ...

$ systemctl restart sshd

$ systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-12-28 10:16:34 KST; 1min 33s ago

... 중간 생략 ...
      
$

 

'Ubuntu' 카테고리의 다른 글

rc.local 활성 설정 (Ubuntu, CentOS)  (0) 2021.12.28
추가 장착한 Disk Mount  (0) 2021.12.28
Install BIND for name server(DNS) on Ubuntu 22.04  (0) 2021.11.05
openssl command example  (0) 2021.11.04
.bashrc 또는 .bash_profile 설정  (0) 2021.07.22
반응형

Mac, Ubuntu, CentOS에서 Terminal을 사용하다보면, 알록달록 Color가 들어간 Text를 보게 된다.

이렇게 색이 들어간 글자를 만들려면, ANSI escape code라는 표준 기술을 활용해야 한다.

ANSI escape code에 관한 자세한 내용은 이 글의 끝 부분에 있는 Reference Web Docs를 보길~~~

 

간단하게 터미널의 글자에 색을 넣는 방법만 보면 아래와 같다.

 

Mac iTerm2 터미널에 글자 컬러 넣기

 

 

ANSI escape code 확인하는 C source code

각 ANSI code가 어떤 color, font, effect를 보여주는지 확인하고 싶다면, 아래와 같이 짧게 코드를 작성해서 돌려보면 바로 감(느낌)을 찾을 수 있다.

##
## File name:  main.c
##

#include <stdio.h>

int main(void)
{
  int i, j, n;

  for (i = 0; i < 11; i++) {
    for (j = 0; j < 10; j++) {
      n = 10*i + j;
      if (n > 108) break;
      printf("\033[%dm %3d\033[m", n, n);
    }
    printf("\n");
  }
  return 0;
}

 

위 C source code를 작성하고, 아래와 같이 gcc 명령으로 compile하고 실행해보면, 각 ANSI code의 숫자가 어떤 색을 표현하는지 알 수 있다.

 

ANSI escape code 확인하는 Python source code

각 ANSI code가 어떤 color, font, effect를 보여주는지 확인하고 싶다면, 아래와 같이 짧게 코드를 작성해서 돌려보면 바로 감(느낌)을 찾을 수 있다.

##
## File name:  main.py
##

import sys
for i in range(0, 16):
    for j in range(0, 16):
        code = str(i * 16 + j)
        sys.stdout.write(u"\u001b[38;5;" + code + "m " + code.ljust(4))
    print u"\u001b[0m"

 

위 Python source code를 작성하고, 아래와 같이 실행해보면, 각 ANSI code의 숫자가 어떤 색을 표현하는지 알 수 있다.

 

 

 

import sys
for i in range(0, 16):
    for j in range(0, 16):
        code = str(i * 16 + j)
        sys.stdout.write(u"\u001b[48;5;" + code + "m " + code.ljust(4))
    print u"\u001b[0m"

 

 

 

 

ANSI escape code의 역사, 표준 정보, Example 등 자세한 내용은 아래 Reference Web Docs를 참고하길 ~~~

 

Reference

 

ANSI escape code - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Method used for display options on video text terminals ANSI escape sequences are a standard for in-band signaling to control cursor location, color, font styling, and other options on

en.wikipedia.org

 

 

ASCII Art Archive

A large collection of ASCII art drawings and other related ASCII art pictures.

www.asciiart.eu

 

※ 아래 Web Docs는 CLI 만들기에 필요한 다양한 Trick과 Tip이 있다.

※ CLI에 Progress Bar, Processing Status, Percentile 등 효과를 넣고 싶다면 아래 Web Docs를 참고할 것 !!!

 

Build your own Command Line with ANSI escape codes

Build your own Command Line with ANSI escape codes Everyone is used to programs printing out output in a terminal that scrolls as new text appears, but that's not all your can do: your program can color your text, move the cursor up, down, left or right, o

www.lihaoyi.com

 

반응형

GitHub에 있는 AWX README.MD 설명을 따라서 설치해보면, 설치 중간에 에러가 발생해서 그런 부분을 회피하면서 설치하는 방법을 메모해봤다.

아래 명령어를 따라서 수행하면, 에러 없이 AWX가 잘 설치된다.

 

 

※ 주의

AWX는 Version 17.1.0 이전의 설치 방법과 Version 18.0.0 이후의 설치 방법이 전혀 다르다.

이 문서의 설치 방법은 Version 15.0.0 ~ 17.1.0만 유효하다.  다른 AWX Version은 이 방법대로 설치할 수 없다.

 

 

설치 환경

  • OS: CentOS 7 (VM on KVM)
  • CPU: 4 Core
  • MEM: 8GB  (실제로 설치해보니, 4GB만 있어도 충분하다. 단, 다른 App이 이 Host에서 같이 운영된다면 넉넉하게 8GB로 구성하는 것이 좋다)
  • AWX Version: 17.1.0

 

설치 절차 (명령 따라하기)

Reference Docs:  https://github.com/ansible/awx/blob/17.1.0/INSTALL.md

 

GitHub - ansible/awx: AWX Project

AWX Project. Contribute to ansible/awx development by creating an account on GitHub.

github.com

 

위 github의 INSTALL.md를 따라해도 되고, 위 문서를 명령만 요약한 아래 명령만 따라해도 잘 설치된다.

(긴 글을 읽는 것이 귀찮다면, 아래 명령을 쭉~  따라하는 것이 마음이 편할 듯)

 

##  보안 수준을 낮춘다.
$  systemctl  stop     firewalld
$  systemctl  disable  firewalld

$  cat  /etc/sysconfig/selinux
...
SELINUX=disabled
...
$  setenforce 0
$  sestatus

##  Ansible 환경 구성
$  yum install -y epel-release
$  yum install -y yum-utils device-mapper-persistent-data lvm2 ansible git python-devel python-pip python-docker-py vim-enhanced wget net-tools

##  Docker Install은 Docker.io를 참고
##     https://docs.docker.com/engine/installation/

$  yum install dnf -y
$  dnf install git gcc gcc-c++ ansible nodejs gettext device-mapper-persistent-data lvm2 bzip2 python3-pip -y

$  dnf install -y 'dnf-command(config-manager)'

$  pip3 install --upgrade setuptools
$  pip3 install setuptools-rust
$  pip3 install wheel
$  pip3 install "pip>=20"
$  pip3 install docker-compose

## inventory file에 넣을 key 생성
$  openssl rand -base64 30
lv4Y2WfbqRrI/+/X+R9mFN/r7BsGTdEdZR7bG8Re

## AWX PKG를 다운로드하고, 설정하기
$  cd  /root/andrew
$  wget https://github.com/ansible/awx/archive/17.1.0.tar.gz
$  tar xf 17.1.0.tar.gz
$  ln -s awx-17.1.0/ awx
$  mkdir -p /var/lib/pgdocker
$  cd /root/andrew/awx/installer

## inventory file 설정하기
$  cat  inventory
localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python3"

[all:vars]

dockerhub_base=ansible

awx_task_hostname=awx
awx_web_hostname=awxweb
postgres_data_dir="~/.awx/pgdocker"
host_port=80
host_port_ssl=443
docker_compose_dir="~/.awx/awxcompose"

pg_username=awx
pg_password=awxpass
pg_database=awx
pg_port=5432

pg_admin_password=password

admin_user=admin
admin_password=password

create_preload_data=True

## 위에서 openssl 명령어로 만든 key를 이곳에 붙여 넣는다.
secret_key=lv4Y2WfbqRrI/+/X+R9mFN/r7BsGTdEdZR7bG8Re

awx_alternate_dns_servers="8.8.8.8,1.1.1.1"

project_data_dir=/var/lib/awx/projects

$  

## Ansible Playbook을 통해 deploy
$ ansible-playbook -i inventory install.yml
...

##
## NOTE: 오랜 시간이 걸리기 때문에 Terminal Window를 1개 더 열어서
##       아래와 같이 container image가 생성되고, container가 구동되는 과정을 확인하는 것이 좋다.
##       (나는 대략 5분 정도 시간이 걸렸다)
##       시간이 오래 걸리는 이유는 container image를 internet을 통해서 pulling해야 하기 때문이다.
##

$  docker image ls
REPOSITORY                TAG        IMAGE ID       CREATED         SIZE
tianon/postgres-upgrade   10-to-12   f81b5bb17600   4 days ago      403MB
postgres                  10         5949e493c793   4 days ago      200MB
postgres                  12         905214d6fdc5   4 days ago      371MB
redis                     latest     7faaec683238   4 weeks ago     113MB
centos                    8          5d0da3dc9764   2 months ago    231MB
ansible/awx               17.1.0     599918776cf2   8 months ago    1.41GB

$  docker container ls -a
CONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS         PORTS                                   NAMES
df511c34e75e   ansible/awx:17.1.0   "/usr/bin/tini -- /u…"   5 minutes ago   Up 5 minutes   8052/tcp                                awx_task
0d4247b6dd14   ansible/awx:17.1.0   "/usr/bin/tini -- /b…"   5 minutes ago   Up 5 minutes   0.0.0.0:80->8052/tcp, :::80->8052/tcp   awx_web
d4f4b8d44901   postgres:12          "docker-entrypoint.s…"   5 minutes ago   Up 5 minutes   5432/tcp                                awx_postgres
e1af073eccee   redis                "docker-entrypoint.s…"   5 minutes ago   Up 5 minutes   6379/tcp                                awx_redis

 

위와 같이 awx, redis, postgres 등 container가 구동되면, Web Browser를 통해서 AWX Web UI에 접속한다.

AWX Login View
AWX Web UI

 

반응형

tcpdump 명령만 이용하면, 출력을 보기 좋게 또는 예쁘게 터미널로 출력하기 어렵다.

보기 좋은 형식으로 출력하려면 tshark 명령을 사용하는 것을 추천한다.

 

 

tshark 명령 사용

tshark을 사용하면, Network Packet이 정말 예쁘게 출력된다.  

아래와 같이 wireshark 패키지를 설치한다.  (참고로 tshark은 wireshark 패키지에 포함되어 있다)

##
## 아래 예시처럼 yum install 명령을 이용하여 wireshark 패키지를 설치한다.
##

$ yum install wireshark
...

##
## 설치 완료 후, 아래 명령과 같이 실행
## 참고: -V 옵션은 Packet을 Decode해서 출력하라는 뜻
##
$ tshark -i eth0 -nV port 53

 

위 예제 명령 정도의 옵션만 사용해도 꽤 보기 좋은 모양으로 IP 네트워크 패킷이 출력된다.

 

 

tcpdump 명령의 -A 옵션 사용해서 가독성 높게 출력하기

tshark을 사용할 수 없는 경우라면, 아래 명령처럼 -A 옵션을 주면, TCP 또는 UDP의 Payload가 ASCII 로 출력된다.

(사람 눈으로 읽을 수 있는, 즉 Readable Character만 터미널에 출력함) 

 

-A 옵션만 사용하면, TCP 세션을 수립하기 위한 SYNACKFIN 패킷도 모두 보여지기 때문에 

Filter에  tcp[32:4] = 0x47455420 조건을 추가한다. ("GET "에 대한 Pointcode 값이다) 

 

 

HTTP GET 요청 메시지만 출력
$ tcpdump -i p2p2 -s 1500 -An 'src net 192.168.0.0/24' and dst port 80 and 'tcp[32:4] = 0x47455420'

 

 

HTTP GET 요청과 응답 메시지 모두 출력
$ tcpdump -i em2 -s 1500 -An 'src net 192.168.0.0/24' and 'tcp[32:4] = 0x48545450' or 'tcp[32:4] = 0x47455420'

 

  또는 아래와 같은 방식을 사용할 수 있다.

(이 방식을 추천함)

$ tcpdump -i em2 -An -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

 


참고: 위의 3개 명령 중에서 제일 마지막 명령이 제일 출력 포맷이 예쁘다. 

반응형

CentOS인 경우에 아래와 같은 Samba(SMB)를 설정한다. 

$  yum  install  samba 
...

$  cat  /etc/samba/smb.conf 
  ... 중간 생략 ... 
        security = user 
        passdb backend = tdbsam 
  ... 중간 생략 ... 
  [homes] 
        comment = Home Directories 
        browseable = no 
        writable = yes 
        read only = no
  ... 중간 생략 ... 

<참고: UNIX 시스템 계정 andrew가 이미 생성되어 있다고 가정> 
$  smbpasswd  -a  andrew 
$  systemctl start  smb
(또는  $ systemctl start smbd)
$  systemctl enable smb
(또는  $ systemctl enable smbd)

 

'CentOS' 카테고리의 다른 글

CPU Pinning 예제 코드  (0) 2022.06.17
Install Ansible AWX (version 17.1.0)  (0) 2021.11.16
How to use Ansible and Playbook  (0) 2021.11.12
Install OS with PXE and kickstart  (0) 2021.11.12
Network config on CentOS 8  (0) 2021.07.10
반응형

CentOS 8에서 특정 Network port, NIC에 대해 IP address를 설정하려면, 

'/etc/sysconfig/network-scripts/ifcfg-*' 설정 파일을 작성해야 한다.

 

예를 들어, ens3 network interface를 설정하려면 아래와 같이 설정 파일을 작성해야 한다.

# /etc/sysconfig/network-scripts/ifcfg-ens3

. . .
BOOTPROTO="dhcp"                             # 고정 IP 설정을 위해 none으로 설정
. . .
IPV6INIT="no"
IPV6_AUTOCONF="no"
IPV6_DEFROUTE="no"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
. . .
ONBOOT="yes"                        # 부팅 / 네트워크 재시작 시 자동 활성화를 위해 yes로 설정
IPADDR=10.10.12.30                  # IP 설정
NETMASK=255.255.255.0               # 서브넷 마스크 설정, prefix=24 설정으로 대체할 수도 있습니다.
GATEWAY=10.10.12.1                  # 게이트웨이 설정 
DNS1=10.10.12.40                    # 1차 네임서버 설정, /etc/resolv.conf 설정파일에서 정의하셔도 됩니다.
DNS2=1.1.1.1                        # 2차 네임서버 설정

 

위 설정 파일을 저장하고 NetworkManager를 재시작한다.

$  systemctl restart NetworkManager

'CentOS' 카테고리의 다른 글

CPU Pinning 예제 코드  (0) 2022.06.17
Install Ansible AWX (version 17.1.0)  (0) 2021.11.16
How to use Ansible and Playbook  (0) 2021.11.12
Install OS with PXE and kickstart  (0) 2021.11.12
Samba(SMB) on CentOS  (0) 2021.07.10

+ Recent posts