[카테고리:] Linux

  • Ubuntu22.04: Docker 설치

    Ubuntu22.04: Docker 설치


    패키지 업데이트 & 필수 패키지 설치

    sudo apt update
    sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release

    Docker 공식 GPG 키 추가

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg

    Docker 저장소 추가

    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" \
      | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    Docker 설치

    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io

    (선택) sudo 없이 docker 명령어 사용하기

    sudo usermod -aG docker $USER
    newgrp docker

  • Firewalld 방화벽 설정 가이드

    Firewalld 방화벽 설정 가이드

    📌 Firewalld 상태 확인 및 관리

    sudo systemctl status firewalld
    • active (running)이면 동작 중
    • inactive (dead)이면 정지 상태

    📌 Firewalld 시작 및 종료

    sudo systemctl start firewalld   # 방화벽 시작
    sudo systemctl stop firewalld    # 방화벽 정지
    sudo systemctl restart firewalld # 방화벽 재시작
    sudo systemctl enable firewalld  # 부팅 시 자동 시작 설정
    sudo systemctl disable firewalld # 부팅 시 자동 시작 해제

    📌 방화벽 규칙 설정 및 관리

    sudo firewall-cmd --list-all
    • 현재 활성화된 방화벽 영역(zone)과 적용된 규칙을 확인할 수 있음.

    📌 방화벽 영역(Zone) 확인

    sudo firewall-cmd --get-active-zones

    📌 방화벽 영역(Zone) 디폴트 존 변경

    # 디폴트 존 변경.
    sudo firewall-cmd --set-default-zone=block
    
    # 특정 인터페이스 block 존에 바인딩.
    sudo firewall-cmd --zone=block --change-interface="인터페이스이름"
    
    # 변경 사항 영구 적용.
    sudo firewall-cmd --runtime-to-permanent

    📌 특정 포트 허용

    sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
    • — zone=public: public 영역에 적용
    • — add-port=8080/tcp: 8080 포트의 TCP 트래픽 허용
    • — permanent: 영구 적용 (재부팅해도 유지됨)

    📌 즉시 적용하려면 방화벽 다시 로드

    sudo firewall-cmd --reload

    📌 특정 서비스 허용

    Firewalld는 서비스 단위로 접근을 제어할 수 있음. 예를 들어, SSH(22번 포트)를 허용하려면:

    sudo firewall-cmd --zone=public --add-service=ssh --permanent
    sudo firewall-cmd --reload

    서비스 목록 확인

    sudo firewall-cmd --get-services

    포트 차단

    sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
    sudo firewall-cmd --reload

    서비스 차단

    sudo firewall-cmd --zone=public --remove-service=http --permanent
    sudo firewall-cmd --reload

    ➡️ Example

    Block 존 ➡️ ipv4로 내가 열고 싶은 IP/32, Port, TCP 열려면..

    sudo firewall-cmd --zone=block --add-rich-rule='rule family="ipv4" source address="IP/32" port port="port번호" protocol="tcp" accept' --permanent
  • Ubuntu 22.04에서 수동 IP 설정하기

    Ubuntu 22.04에서 수동 IP 설정하기

    📌 NetworkManager에서 고정 IP 설정

    nmcli device show <인터페이스 이름>

    📌 NetworkManager를 사용하여 수동 IP 설정

    sudo nmcli connection modify <Wired connection 1> ipv4.method manual ipv4.addresses <사용할 IP/mask> ipv4.gateway <게이트웨이 IP> ipv4.dns <DNS IP> autoconnect yes

    📌 변경사항 적용

    sudo nmcli connection down enp5s0 && sudo nmcli connection up enp5s0
    sudo systemctl restart NetworkManager

    ✅ 확인 사항

    ☁️ IP 설정 확인

    ip a show <네트워크 인터페이스 이름>

    ☁️ 라우팅 정보 확인

    ip route

    ☁️ DNS 확인

    nmcli device show enp5s0 | grep DNS

    ☁️ 인터넷 연결 테스트

    curl https://google.com
    ping -c 4 google.com
    ping -c 4 8.8.8.8

  • 리눅스 SSH 세션 끊김 문제 해결법

    리눅스 SSH 세션 끊김 문제 해결법

    📌 리눅스 SSH 세션 끊김 문제 해결법

    터미널 접속하고 나서, root 계정으로 vi /etc/profile 파일로 들어간 다음, TMOUT 부분이 있을 것이다.

    나는 rocky linux를 사용하고, 처음에는 900초로 설정되어있던 거를 7200초로 변경하였다.

    세션을 끊은 뒤, 다시 접속하면 영구적으로 적용이 완료될 것이다.

  • ubuntu 22.04에서 Nvidia 드라이버 자동 업데이트 비활성화 설정하는 법

    ubuntu 22.04에서 Nvidia 드라이버 자동 업데이트 비활성화 설정하는 법

    📌 ubuntu 22.04에서 Nvidia 드라이버 자동 업데이트 비활성화 설정하는 법

    ✅ 자동 보안/패키지 업데이트

    • unattended-upgrades 서비스 비활성화
    sudo systemctl disable --now unattended-upgrades
    sudo apt remove unattended-upgrades
    • 또는 설정 파일 수정 (파일 내용: /etc/apt/apt.conf.d/20auto-upgrades)
    APT::Periodic::Update-Package-Lists "0";
    APT::Periodic::Unattended-Upgrade "0";

    ✅ NVIDIA 드라이버 자동 업데이트 방지

    sudo apt-mark hold nvidia-driver-<version>
    sudo apt-mark hold linux-image-<version>

    ✅ 커널 자동 업데이트 방지

    sudo apt-mark hold linux-image-generic linux-headers-generic

    ✅ snap 자동 업데이트 비활성화(snap 사용 시)

    sudo systemctl disable snapd.service
    sudo systemctl disable snapd.socket
    sudo systemctl disable snapd.seeded.service

    ✅ 자동 패키지 다운로드 방지

    sudo systemctl disable --now apt-daily.timer apt-daily-upgrade.timer

    ⏰ cron, systemd 타이머 기반 자동 작업들 점검

    ls /etc/cron.daily/
    -----
    0anacron  apport  apt-compat  cracklib-runtime  dpkg  logrotate  man-db
    
    ls /etc/systemd/system/*.timer

    ✅ apport 제거, anacron 무력화, apt-compat 무력화

    sudo apt purge apport -y
    sudo chmod -x /etc/cron.daily/0anacron
    sudo chmod -x /etc/cron.daily/apt-compat

    🚀 확인 작업

    ✅ NVIDIA 드라이버 및 관련 패키지 고정 여부

    apt-mark showhold | grep nvidia
    
    ---
    
    nvidia-driver-535-server
    nvidia-dkms-535-server
    libnvidia-compute-535-server:amd64
    ... 등등

    ✅ 커널 고정 여부 확인

    apt-mark showhold | grep linux
    
    ---
    
    linux-image-5.15.0-91-generic
    linux-headers-5.15.0-91-generic

    ✅ 자동 업데이트 비활성화 확인

    systemctl is-enabled unattended-upgrades

    ✅ cron.daily 내 자동 업데이트/리포트 스크립트 비활성화 확인

    ls -l /etc/cron.daily/

    ✅ 전체 hold 패키지 리스트 확인

    apt-mark showhold

  • CUDA 및 NVIDIA 드라이버를 RHEL 8에 설치하는 방법

    CUDA 및 NVIDIA 드라이버를 RHEL 8에 설치하는 방법

    🚀 CUDA 및 NVIDIA 드라이버를 RHEL 8에 설치하는 방법

    이 포스트는 RHEL 8 기반 시스템에서 CUDA 개발 환경과 NVIDIA 드라이버를 수동으로 구축하는 과정을 정리한 것입니다. 로컬 패키지 저장소 설정부터 GPU 드라이버, CUDA 설치까지의 전체 흐름을 담았습니다.

    📁 1. 로컬 YUM 리포지터리 구성

    ISO 또는 USB를 통해 마운트된 RHEL 설치 미디어에서 리포지터리를 복사하고 설정합니다.

    mkdir /local_repo
    cp -r /run/media/User/RHEL-8–4–0-/AppStream /local_repo/
    cp -r /run/media/User/RHEL-8–4–0-/BaseOS /local_repo/
    chown -R User:User /local_repo/AppStream /local_repo/BaseOS

    리포지터리 설정 파일 작성 (/etc/yum.repos.d/local.repo):

    [AppStream]
    name=AppStream
    baseurl=file:///local_repo/AppStream
    enabled=1
    gpgcheck=0
    
    [BaseOS]
    name=BaseOS
    baseurl=file:///local_repo/BaseOS
    enabled=1
    gpgcheck=0

    🌐 언어 및 지역 설정 (한국어) — 선택

    sudo dnf install glibc-locale-source glibc-langpack-ko -y
    sudo localectl set-locale LANG=ko_KR.UTF-8
    locale

    🛠️ 필수 패키지 및 개발 도구 설치

    sudo dnf groupinstall "Development Tools" -y
    sudo dnf install -y epel-release
    sudo dnf install -y gcc kernel-devel-$(uname -r) kernel-headers-$(uname -r) dkms elfutils-libelf-devel

    🔌 NVIDIA 드라이버 설치 (nouveau 비활성화 포함)

    sudo bash -c 'echo -e "blacklist nouveau\noptions nouveau modeset=0" > /etc/modprobe.d/blacklist-nouveau.conf'
    sudo dracut --force
    sudo reboot
    
    # 재부팅 후 nouveau가 비활성화되었는지 확인:
    lsmod | grep nouveau  # 출력 없으면 성공

    🖥️ NVIDIA 드라이버 설치 (.run 파일 방식)

    wget https://us.download.nvidia.com/XFree86/Linux-x86_64/535.154.05/NVIDIA-Linux-x86_64-535.154.05.run
    chmod +x NVIDIA-Linux-x86_64-535.154.05.run
    
    # GUI 모드 종료 (텍스트 모드로 부팅)
    sudo systemctl set-default multi-user.target
    sudo reboot
    
    # 재부팅 후 설치:
    sudo ./NVIDIA-Linux-x86_64-535.154.05.run
    
    # 설치 완료 후 GPU 확인:
    nvidia-smi

    🧠 CUDA 설치 (12.2 버전)

    sudo dnf config-manager --add-repo=https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
    sudo dnf clean all
    sudo dnf makecache
    sudo dnf install -y cuda-12-2
    sudo dnf install -y cuda-toolkit-12-2

    🔧 CUDA 환경 변수 설정

    sudo bash -c 'cat <<EOF > /etc/profile.d/cuda.sh
    export PATH=/usr/local/cuda-12.2/bin:\$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:\$LD_LIBRARY_PATH
    EOF'
    
    source /etc/profile.d/cuda.sh

    ✅ 설치 확인

    nvidia-smi         # GPU 상태 확인
    nvcc --version     # CUDA 컴파일러 버전 확인

    🔄 GUI 모드 복원 (필요시)

    sudo systemctl set-default graphical.target
    sudo reboot

    📌 참고 사항

    • nouveau 모듈이 비활성화되지 않으면 NVIDIA 드라이버 설치 시 에러가 발생합니다.
    • .run 방식 드라이버 설치는 커널 업데이트 시 재설치가 필요할 수 있습니다.
    • CUDA 설치 이후 /usr/local/cuda 심볼릭 링크를 확인하면 다른 버전으로 전환도 가능

  • 리눅스환경에서 Firewalld 이용하기

    리눅스환경에서 Firewalld 이용하기

    📌 Firewalld 상태 확인

    firewall-cmd --state
    firewall-cmd --get-default-zone

    📌 기본 존 변경

    firewall-cmd --set-default-zone=block

    📌 현재 활성화된 존 확인

    firewall-cmd --list-all

    📌 서비스 허용

    firewall-cmd --zone=block --add-service=<서비스명>
    firewall-cmd --zone=block --add-service=http

    📌 block 존에서 IP와 포트 허용 설정

    firewall-cmd --zone=block --add-rich-rule='rule family="ipv4" source address="IP" port port="포트" protocol="tcp" accept'

    ✅ 변경사항을 영구적으로 저장

    firewall-cmd --runtime-to-permanent

    ✅ Firewalld 재시작

    systemctl restart firewalld
  • 리눅스에서 포트 없는 프로세스 체크하기

    리눅스에서 포트 없는 프로세스 체크하기

    리눅스에서 포트 없는 프로세스 체크하기

    만약 사용하는 port가 없고, 프로세스 이름으로 health check를 하려면, 먼저 리눅스 서버에 python 설치한다. 그리고, sh 파일을 만들어야 한다.

    #!/bin/bash
    # 체크할 프로세스의 경로를 변수에 저장합니다.
    PROCESS_PATH="프로세스 이름"
    # 프로세스가 실행 중인지 확인합니다.
    if pgrep -f "$PROCESS_PATH" > /dev/null
    then
        PROCESS_STATUS=1  # 프로세스가 실행 중이면 1
    else
        PROCESS_STATUS=0  # 프로세스가 실행 중이지 않으면 0
    fi
    # Prometheus 메트릭 포맷으로 출력합니다.
    echo "# HELP process_up Is the process running (1 for yes, 0 for no)"
    echo "# TYPE process_up gauge"
    echo "process_up $PROCESS_STATUS"

    해당 코드는 프로세스가 실행 중인지 아닌지 체크하는 code, 위의 sh 파일을 주기적으로 확인하는 sh파일 생성

    #!/bin/bash
    while true; do
        /usr/local/bin/b2b_check.sh > /var/www/html/metrics
        sleep 15
    done

    (선택) 시스템 서비스 등록을 해줘도 됨.

    해당 파일을 python설치하면 기본적으로 있는 http로 데이터를 받아 prometheus가 데이터를 받을 수 있게 만들어 준다.

    그리고, 그라파나에서 해당 프로세스 체크를 PromQL — 대시보드 형태로 제작하면 된다.

  • 고정 IP 설정: Linux 네트워크 인터페이스

    고정 IP 설정: Linux 네트워크 인터페이스

    고정 IP 설정: Linux 네트워크 인터페이스

    Linux | network-interface 설정을 보는 방법은 network-interface를 확인해야 함

    ip addr로 현재 활성화 된 네트워크 이름을 확인

    cd /etc/sysconfig/network-scripts/디렉토리에서 활성화된 네트워크 인터페이스 이름과 관련한 ifcfg-“”” 파일 확인

    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    #BOOTPROTO=dhcp 이렇게 주면 자동 ip 설정.
    # 이렇게 없으면 수동 ip 설정.
    BOOTPROTO=none
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    # 이건 unique 값
    NAME="""
    # 이건 unique 값
    UUID="""
    # 이건 unique 값
    DEVICE="""
    ONBOOT=yes # yes 로 하면 부팅 할 때 ip 자동 노출.
    IPADDR=192.168.1.1
    PREFIX=27 # netmask 규칙
    GATEWAY=192.168.0.1
    DNS1="""
    IPV6_PRIVACY=no
    ZONE=block # 방화벽 존 active

    주석 처리를 참고해 고정 IP 설정 할 수 있음

  • CentOS 7에서 Nginx 설치 및 설정 방법

    CentOS 7에서 Nginx 설치 및 설정 방법

    CentOS 7에서 Nginx 설치 및 설정 방법

    • Wget 설치
    yum install -y wget
    • 필수 패키지 설치
    sudo yum install gcc pcre-devel zlib-devel make unzip openssl-devel
    • Nginx 1.26.2 소스 코드 다운로드
    wget http://nginx.org/download/nginx-1.26.2.tar.gz
    • 압축 해제 및 디렉토리 이동
    tar -zxvf nginx-1.26.2.tar.gz
    rm -rf nginx-1.26.2.tar.gz
    cd nginx-1.26.2
    • Nginx 컴파일 설치
    ./configure --with-http_ssl_module
    make
    sudo make install
    • Nginx 실행
    sudo /usr/local/nginx/sbin/nginx

    실행이 되면 잘 설치된 것. 잘 설치 되었으면 시스템 등록을 하기 위해 프로세스 kill

    ps -ef | grep nginx
    
    # 해서 나온 프로세스를 kill.
    kill -9 "프로세스 넘버"

    자동으로 프로세스 올라올 수 있도록 시스템 등록

    • Nginx.service 파일 생성
    sudo vi /etc/systemd/system/nginx.service
    
    [Unit]
    Description=The NGINX HTTP and reverse proxy server
    After=network.target
    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/logs/nginx.pid
    ExecStartPre=/usr/local/nginx/sbin/nginx -t
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s stop
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
    • Systemd 데몬 reload
    sudo systemctl daemon-reload

    Nginx 서비스 시작 및 부팅 시 자동 실행 설정

    sudo systemctl start nginx
    sudo systemctl enable nginx
    • Nginx 상태 확인
    sudo systemctl status nginx

    Nginx 버전 확인하는 법

    /usr/local/nginx/sbin/nginx -v