CentOS 8 -> Rocky Linux 전환 실패

2021-06-25 ~ 2021-06-26 간에 CentOS 8 최소 설치버전을 Rocky Linux 전환 하는데 실패했다. 원인은 FTP 미러 데이터 정합성 문제로 보이며 일시적인 문제일듯. 작업에 사용한 스크립트는 https://github.com/rocky-linux/rocky-tools

1. 기본 설정 시, Rocky Linux mirrorlist 의 미러들의 repodata 못 받아와서 실패 https://pastebin.com/L6XeY3CD

2. baseurl mirror.navercorp.com 으로 지정했을 때 특정 패키지 사이즈 문제로 실패 https://pastebin.com/u571jjgH

migrate2rocky.sh 실행하는 동안 /etc/yum.repo.d 하위 파일들이 자꾸 변경 되고, mirrorlist 를 기본으로 작업 진행 되기 때문에 baseurl 설정으로 바꿔주는 무식한 스크립트로 해결. 링크 참조.

https://gist.github.com/jellygit/f39160d969a520db25524dbc21473212

Rocky Linux VS AlmaLinux

‘VS’ 는 어그로 끌어보려는거고… “EL8 파생판이지만 기본 외의 주변부 구현에 차이가 있다.”가 결론.

https://www.redhat.com/ko/blog/faq-centos-stream-updates

두 배포판 모두 RHEL 1:1 동일하게 구현한다고 적어놓음.

Rocky Linux is a community enterprise operating system designed to be 100% bug-for-bug compatible with America’s top enterprise Linux distribution now that its downstream partner has shifted direction. It is under intensive development by the community. Rocky Linux is led by Gregory Kurtzer, founder of the CentOS project. Contributors are asked to reach out using the communication options offered on this site.

AlmaLinux (opens new window) is an Open Source and forever-free enterprise Linux distribution, governed and driven by the community, focused on long-term stability and a robust production grade platform. AlmaLinux OS is a 1:1 binary comptible with RHEL® 8 and it was founded by the team behind the well-established CloudLinux OS (opens new window).

실제론 차이가 좀 있다. BaseOS, AppStream, extras 는 동일하지만 기본 소스가 아닌 SSG (SCAP Security Guide), SIG(Special Intrest Group) 지원에서 RL와 AL 이 차이가 보임.

보안설정(hardening): OpenSCAP

Rocky Linux: 존재하긴 하나, 적용 불가. CPE dictionary 의 문제인지 전 항목이 ‘notapplicable’. 8.4 RC1 버전은 아예 룰이 없었고… 8.4 GA 버전은 존재하지만 결과는 캡쳐와 같다.

AlmaLinux: 존재하며, Anaconda oscap plugin 도 정상 동작해 설치 단계부터 보안 설정 가능, 설치 후 적용 및 검사 가능.

Rocky Linux PCI-DSS
AlmaLinux PCI-DSS

SIG 패키지 설치된 CentOS 8 에서 전환(migration)

glusterfs 사용 시, Rocky Linux 전환 불가 (참고 링크), AlmaLinux 전환 가능

왜 이런가?

두 배포판 모두 RHEL 의 변형이지, CentOS 의 변형이 아니다. ‘같은 소스로 생성한 배포판이라 똑같을줄 알았다’고 이야기하니, AlmaLinux 의 릴리즈 엔지니어링 책임자 Eugene Zamriy 님의 대답이 인상이어서 요약하자면

동일 소스로 빌드해도 잘못될 부분이 존재한다. 다른 빌드 순서, 잘못된 RPM 매크로, 기타 등등. 때론 레드햇의 구현을 재현하기 어려운 경우도 있다.

어떤 사람은 EL8 파생 배포판을 sed 와 koji(RPM 빌드 시스템)만 있으면 만들 수 있다고 하지만, 현실은 그렇지 않다.

2021-02-04 OSCAP 테스트

한 일

OSCAP PCI-DSS 설정 적용 테스트 https://www.open-scap.org/getting-started/

CentOS 7 Ansible 설치

  1. 저장소 추가
    1. yum -y install centos-release-ansible-29
  2. Ansible 설치
    1. yum -y install ansible
  3. OSCAP 스캐너 설치
    1. yum install scap-workbench openscap-scanner
  4. 스캔 룰 기준으로 ansible 북 만들기
    1. oscap xccdf generate fix –profile pci-dss –template urn:xccdf:fix:script:ansible /usr/share/xml/scap/ssg/content/ssg-rhel7-xccdf.xml
    2. 표준 출력 되니 출력재지정으로 playbook.yml 만들 것.
  5. 생성된 playbook.yml 적용
    1. ansible-playbook -i “<IP>,” playbook.yml

스캔 항목이 많고 AIDA DB 생성까지 하기 때문에 시간이 꽤 걸림.

RHEL가 아닌 CentOS 라서 GPG 키 파일 읽기 실패… playbook.yml 에서 파일명을 RPM-GPG-KEY-centosofficial 로 수정하면 에러 안 날듯.

파일명 수정해줬더니 에러 없이 잘 끝났다. 그런데 이거 설정을 바꾸는게 맞나…?

RHEL Life Cycle

https://access.redhat.com/support/policy/updates/errata/

리눅스 아재(할배)력 셀프 테스트

https://sunyzero.tistory.com/245

  • 링크된 셀프 테스트 글도 좋지만 다른 글도 다 좋다. 2016년 글을 2021년에서야…

옛날 리눅스만 알고 있는지, 대체된 명령어도 알고 있는지 테스트…

몰랐던거 1-6, 2-1, 2-3, 3-4, 3-6, 3-7, 3-8, 4-2

WSL 등은 PID 1번이 init 이라서.. 레거시 버리고 최신 명령어만 알면 안된다는게 함정.

그 외에 CentOS 기준으로 쓴 글이라 그런지 동의할 수 없는 부분도 좀 있다.. netstat(net-tools) 는 1.42 까진 manpage에서 ss 쓰라는 내용이 있었으나 net-tools 2.x 대로 업데이트 되면서 그런 문구는 사라졌다. nslookup 도 한동안 dig 쓰는게 낫다고 되어있었으나 업데이트가 되면서 필요에 따라 적당히 맞는거 쓰면 되는듯.

grubby 같은건 archlinux 에 아예 없다.

NTP 설정 및 운영 주의점

리눅스 ntpd(혹은 chrony)와 timesyncd 같이 쓰지 말 것

결론부터 말하면, 시간 동기화 데몬은 서버에 한 개만 실행 중이어야 한다.

추가내용: 서버 시간 동기화: 제발 21세기엔 rdate 쓰지 말자

systemd를 사용하는 리눅스 서버의 시간 동기화를 설명하는 인터넷의 여러 글 중에 ntpd(혹은 chrony) 설치와 함께 timesyncd 를 같이 활성화하라는 내용이 여럿 있다.

# timedatectl
Local time: 금 2020-06-19 00:34:37 KST
Universal time: 목 2020-06-18 15:34:37 UTC
RTC time: 목 2020-06-18 15:34:37
Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: yes
NTP service: inactive
RTC in local TZ: no

위 명령 실행 결과에서 NTP Service 항목이 active 로 나와야 한다는건데, timedatectl 에서 말하는 NTP Service 는 ‘systemd-timesyncd’ 이다. timedatectl set-ntp on 한 뒤에 확인해보라.

# timedatectl set-ntp on
# timedatectl 
Local time: 금 2020-06-19 00:39:24 KST
Universal time: 목 2020-06-18 15:39:24 UTC
RTC time: 목 2020-06-18 15:39:24
Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
# systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; vendor p>
Active: active (running) since Fri 2020-06-19 00:39:20 KST; 35s ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 588613 (systemd-timesyn)
Status: "Initial synchronization to time server 211.233.40.78:123 (0.arch.pool.ntp.o>
Tasks: 2 (limit: 9414)
Memory: 1.8M
CGroup: /system.slice/systemd-timesyncd.service
└─588613 /usr/lib/systemd/systemd-timesyncd
6월 19 00:39:20 Arch systemd[1]: Starting Network Time Synchronization…
6월 19 00:39:20 Arch systemd[1]: Started Network Time Synchronization.
6월 19 00:39:21 Arch systemd-timesyncd[588613]: Initial synchronization to time server

한 시스템에 두 개 이상의 시간 동기화 데몬이 실행되면 서버 시간이 널뛰기 할 수 있다.

참고로 systemd-timesyncd 는 SNTP 구현체로 NTP 클라이언트 역할만 함. 2020 년 현재 NTP 구현체 중 chrony 쓰는게 가장 낫다.


NTP 는 시간 동기화 자주 한다고 정밀도가 높아지지 않는다

NTP 를 1 분마다 실행한다고 오차가 작아지지 않는다. 오히려 반복 실행 시 뒤에 실행되는 동기화 명령은 무시된다.

https://serverfault.com/questions/378133/how-to-configure-ntpd-to-sync-time-more-frequently

2021년 1월 결산: 아무도 가르쳐주지 않는 computer tooling & GME 공매도 사태

1월 중 중요하고 기억에 남는 글과 사건

컴퓨터 전공자 필수로 알아야 할 도구 사용 방법

  • 리눅스/맥 커맨드라인 셸 입문자를 위한 생존 가이드
  • 전산 전공자가 알고 있다면 크게 도움될 내용. 직장인을 위한 엑셀 같은건 있지만 이런 컴퓨터 툴링은 가르쳐주는 곳이… 있나?
  • 컴퓨터 사용 방법은 악기 다루는 것과 같은듯. C 언어 책에 있던 내용인데, 연주회를 보더라도 내가 그 연주회 곡을 연주할 수 없듯, 많은 연습과 악기(툴)를 튜닝해야 잘 할 수 있게 된다.
  • 리누스 토발즈… 리눅스 하나만으로도 역사에 이름이 남을텐데(현재 서버나 안드로이드 폰이 다 리눅스 기반이다.) git 까지 만들다니 너무 대단하다.

미국 게임스탑(GME) 공매도 전쟁

  • 미국 오프라인 게임 소매점 체인인 게임스탑. 스팀과 같은 ESD로 어려움이 있었다가.. 2019년 부터 경영진 네 번인가 바뀌고 온라인 사업 진행 + PS5, XSX 출시 시 매출 증가 기대로 주가가 단기간에 상승. 이렇게 상승한 주가가 과도하게 상승했다며 여러 헷지펀드가 숏 포지션 잡으면서 유통물량보다 많은 공매도 포지션이 생김. 만기일마다 부담해야 할 이자도 엄청난 상태.
  • 개미들(월스트릿뱃츠, WBS)이 레딧에서 어떻게 혼내줄 수 있을까 논의하다 주가를 올리면 손실을 줄 수 있으며, 현물과 콜 옵션 매수를 하고 팔지 않기로(다이아몬드 핸드) 결집. 헷지펀드 과도한 공매도 포지션에 대한 개미의 응징 시도.
  • 콜옵션 발행한 기관이 콜 헷지를 위해 주식 현물 매수 해야 해서 주가가 오르는 모양. 유통주식주는 없으니 상하한 없는 미국 주식시장 특성상 하루에 변동폭이 100%를 넘나듬.
  • 감마 스퀴즈, 숏 스퀴즈 등의 내용을 알아야 이해가 될듯.
  • 애초에 과도하게 숏 포지션 잡은 헷지펀드들이 문제가 아닌가 싶은데… 연쇄작용으로 다른 자산군에 영향을 주게 되는게 우려 됨.
  • 공매 포지션 잡은 헷지펀드 운영사가 개인 투자자들이 많이 사용하는 로빈후드에 투자를 크게 하고 있는 상황에서 2021-01-28 에 로빈후드 매수가 막히고, 2021-01-29엔 한 주만 매수할 수 있게 하는 등의 조치로 반발, 소송 직면. 어떤 사람은 로빈후드 계좌의 게임스탑이 멋대로 매도 되었다고. 로빈후드의 유동성 문제 때문에 거래 막았을 수도 있다…지만.
  • 2011년 월스트리트 점령 시위 때 안전한 윗층에서 샴페인 웃고 마시면서 사진 찍던 상징적인 모습(그냥 우연히 결혼식에 참석한 하객들이 시위를 구경하고 있었다는데…. 월스트릿에서 결혼식하고 있는 사람과 하객들이 관련자 아닌 사람일까..?)과 여러 악감정 때문에 내 돈 잃어도 좋으니 헷지펀드 피눈물 흘리게 해주세요 하면서 참전하고 있는듯. https://bbs.ruliweb.com/community/board/300143/read/50704348?view_best=1

서버 시간 동기화: 제발 21세기엔 rdate 쓰지 말자

한줄 요약: 시간 동기화는 간단하지 않다.

최소한 NTP 프로토콜 사용

이 글을 쓰는 이유는… 2020년 12월 현 시점에서 rdate(와 cron)로 시간 동기화 하겠다는 충격적인 블로그 글을 봐서…

결론부터 말하면 NTP 프로토콜 지원하는 프로그램으로 동기화 하자.

시간 보정 방법

step: 즉시 시간 보정

slew: 시계 회전 속도를 조절하여 시간 보정. 단조증가 시계 Monotonic clock.

시간 동기화 프로토콜 종류

Time Server udp/37 rdate 등이 사용하는 시간 서비스. 정확하지도 않고 개인 시스템이더라도 쓰지 말자…

NTP udp/123 시간 동기화 표준 프로토콜, 윈도, 리눅스 동일

SNTP udp/123 NTP의 서브셋, NTP와 동일 포트 사용. 1-50ms 정도의 정확도

PTP Precision Time Protocol, NTP보다 더 정밀한 프로토콜. chrony 에서 미지원, 지원 계획 없음. 참고#1, 참고#2

  • 과학, 금융 수준에서 사용… 커널과 하드웨어가 지원되어야 사용 가능.

NTS Network Time Security for the Network Time Protocol. chrony 4.0 부터 지원.

시간동기화 프로그램

rdate udp/37 사용, xinetd 등에서 사용하는 단순 시간 변경 툴. 쓰면 안된다. step 방식으로만 보정하기 때문.
systemd-timesyncd systemd에서 사용하는 시간 동기화 데몬. SNTP 구현체인데 구현이 약간 다름. 오차 100 ms 정도 된다고.

ntpd NTP 구현체 CentOS 6까지 기본 시간 동기화 데몬.
chrony ntpd보다 개선된 구현체. 보안면에서 가장 좋다는 평가. CentOS 7부터 기본 시간 동기화 데몬. NTP 구현체 비교
w32tm 윈도 시간동기화 툴. Windows Server 메뉴얼을 보면 알겠지만… 정확도가 2016에서야 좋아졌다(아래 이미지 참조)

rdate와 ntp(chrony)의 차이점

  • rdate 실행 시 서버쪽 시간을 바로 적용. 시간 서버 – 클라이언트 60초의 오차가 있을 때 60초를 즉시 건너 뛴다.
    그래서 시간이 빠른 장비의 시간 보정을 rdate로 하면 (장비 관점에서)시간이 과거로 돌아가는 문제가 있음 -> DB의 경우 과거 시간으로 데이터가 쌓이면 DB 테이블이 깨질 수 있음.
  • ntpd(chrony)는 오차 시간을 빠르게 혹은 느리게 시간을 돌려서 맞춰(slewing) rdate와 같은 문제 발생하지 않음.
    • 시간 오차가 너무 클 때는 NTP 구현체도 step 방식으로 시간 보정.

시간

1초. 1초의 정의가 지속적으로 바뀌었음. https://ko.wikipedia.org/wiki/%EC%B4%88_(%EC%8B%9C%EA%B0%84)#cite_note-1

  • 지구 자전(하루)에 의한 평균 태양일의 1/86,400 으로 정의
    • 지구의 자전이 불규칙함. 계속 느려지고 있으며, 큰 지진에도 영향 받아 정확도 보장이 안됨.
      • 2021-01-09 지구 자전이 빨라져서 역윤초(음의 윤초) 적용 검토 필요할 수 있다는 뉴스.
      • 지구 온난화로 빙하가 녹아 지구 질량 재분배가 발생한게 아닐까 하는 연구결과가 2015년 경에 있었음.
  • 1956년, 1900년 1월 0일 12시 기준 태양년의 1/31556925.9747, 자전에서 공전으로 기준 변경
  • 1967년, 원자 시계 발명 되어 세슘-133 원자의 1초간 진동 수 (보조적으로 루비듐 원자)

그 외 시간 관련해 알면 좋은 것

  • 2020년 현재까지 가장 정밀한 시간(초) 측정 장치는 ‘광격자 시계(or 광시계)’.
    • 가장 정밀하지만 아직 표준 시간 기준으로 채택되어 사용 중은 아닌 듯.
  • 고도에 따라 시간이 다르게 흐름(중력 영향 차이 발생하기 때문)
  • 윤초(Leap second): 원자시계와 태양시간의 오차 보정하기 위함
  • UTC 세계 협정시, KST는 UTC +9h
  • epoch

IT 인프라의 시간 동기화

인증 시스템이나 클러스터에서 모든 기준은 시간이 되기 때문에 각 시스템간 시간 차이가 발생하면 신뢰할 기준이 없어지는 상황이 된다. 그렇다면 시간 오차를 모든 단위에서 ‘0’로 할 수 있는가?

시간 오차 제로: 매우 어렵다… 물리적으로 불가능. NTP 가 실제 네트워크에서 잘 동작한다고 보장할 수 있는 사람/단체는 아무도 없음. 다만 같은 서비스 그룹끼리 비슷한 시간 유지하여 서비스 데몬에서 로그가 뒤섞이지 않는 정밀도를 목표로 해야. NTP 프로토콜은 어디까지나 네 가지 시간을 조합, 추정하여 오차 보정하여 적용하는 것이지 오차를 ‘0’으로 해주는 프로토콜이 아니다.

메인보드와 OS시간: 메인보드가 UTC를 쓰는가, KST를 쓰는가? 보드에서 이미 KST를 쓰는데 OS에서 추가로 +9 하는 경우가 있음.

Linux 에서 윤초 해결: Timezone 패키지(tzdata) 수시로 업데이트 해야함.

chrony 의 원격지 chrony 관리: authhash 명령 실행해보면 ‘Authentication is no longer supported in the command protocol.’ 라고 뜨는데, chrony 2.2 에서 보안 문제로 제거된 기능이라고… CentOS 6 에 설치되는 chrony 는 2.1이라 사용 가능하지만 CentOS 7만 돼도 버전이 더 높아서 원격지 chrony 관리는 못함.


관련링크

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-configuring_ntp_using_the_chrony_suite#sect-Using_chrony
https://ubuntu.com/server/docs/network-ntp
http://time.ewha.or.kr/

WSL2 에서 minikube 로 k8s 사용

결론: minikube 는 WSL 내부의 리눅스 바이너리로 실행하면 안됨, 윈도우에 minikube.exe 설치해놓고 사용해야 함.

윈도용 docker 설치 / 윈도용 minikube 설치 / WSL 머신

minikube.exe 경로 확인하여 WSL 내에서 실행 가능하도록 설정(WSL는 윈도 바이너리 실행 된다…). 내 경우 ‘/c/Program Files/Kubernetes/Minikube/minikube’ 경로였으며 WSL 에서 실행하기 위해 .bashrc 에 아래와 같이 설정했다.

export PATH="$HOME/minikube:$PATH"
export DOCKER_CERT_PATH=/mnt/c/Users/사용자명/.minikube/certs

cat ~/minikube/minikube

#!/bin/sh
/mnt/c/Program\ Files/Kubernetes/Minikube/minikube.exe $@

minikube start 해보면 인증서 경로를 못 찾는 다는 내용이 다수 발생..

cat ~/.kube/config 파일에 윈도쪽에 있는 인증서 경로를 넣어주면 됨.

apiVersion: v1
clusters:
- cluster:
certificate-authority: /mnt/c/Users/jelly/.minikube/ca.crt
server: https://192.168.49.2:8443
name: minikube
contexts:
- context:
cluster: minikube
namespace: default
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /mnt/c/Users/jelly/.minikube/profiles/minikube/client.crt
client-key: /mnt/c/Users/jelly/.minikube/profiles/minikube/client.key

참고문서

https://medium.com/@joaoh82/setting-up-kubernetes-on-wsl-to-work-with-minikube-on-windows-10-90dac3c72fa1

xz: 원본 파일의 수정 시간 유지하며 다른 경로로 압축

for i in $( /usr/local/bin/fd -E '*xz' -E '*zip' -E '*gz' -E '*tgz' -p "./172.16.*" -t f --changed-within '2020-08-17 00:00:00' --changed-before '2020-08-19 23:59:59' ) ;
do if [ -e /data2/$i ]; then
ls -l /data2/$i;
elif [ -e /data2/$i.gz ];
then ls -l /data2/$i.gz ;
else
xz -v -T6 -c "$i" > "/data2/$i.xz";
touch -d "$(date -R -r "$i")" "/data2/$i.xz";
fi;
done

xz 에 ‘-c’ 옵션은 압축 파일을 표준출력으로 보내는 명령. ‘-k’ 이 원본을 유지하지만 다른 경로로 저장할 수 없으니 ‘-c’ 옵션을 쓰면 된다.

생성하고 끝이면 좋겠는데… 만약 파일 수정 시간 기준으로 관리하고 있다면 원본의 수정 시간을 가져와야 한다. 이미 생성된 파일 수정 시간 수정은 ‘touch -d’ 옵션이고, 원본의 시간을 읽어들이는게 ‘date -r’ (‘-R’ 은 시간표기 방법)

참고로 xz 명령 표준 출력이 병렬처리 되기도 하고 안되기도 하는데, CentOS 6 기본 xz 4.999.9 beta 는 표준 출력 압축 시 싱글 스레드로 실행. xz 5 대 버전부터 멀티 스레드로 압축 됨을 확인.

fd 명령은 rust 로 작성된 find 명령. https://github.com/sharkdp/fd 참조. rust 로 작성된 CLI 명령 중 가장 유용하지 않나 싶다. rust command 는 https://news.hada.io/topic?id=2958 참고 (rust command 로 grep, find, du 를 대체 시 멀티 스레드로 실행할 수 있어서 몇 배의 성능 향상을 얻을 수 있다.)

아래는 rust crates 에서 command-line-utilities 다운로드 순 정렬한 주소.

https://crates.io/categories/command-line-utilities?sort=downloads
https://zaiste.net/posts/shell-commands-rust/

Arch linux 업데이트 후 쉘 실행 시 append_path 실행 실패

/etc/profile.d/perlbin.sh:6: command not found: append_path
/etc/profile.d/perlbin.sh:8: command not found: append_path
/etc/profile.d/perlbin.sh:10: command not found: append_path

2020 년 9 월 말 경부터 쉘 실행시 (bash,zsh) 위 같은 에러가 발생한다면, /etc/profile 업데이트 되었는지 확인할 것. 자신만의 설정을 넣었다면 /etc/profile 파일이 업데이트 안되고 /etc/profile.pacman 에 있어서 append_path 를 못 찾아서 발생하는 건임.

https://bbs.archlinux.org/viewtopic.php?id=259400