상세 컨텐츠

본문 제목

우분투 세팅 정리

자료나 생각들/IT 정보

by 엘빌스 2023. 10. 5. 21:06

본문

수정 2024. 4. 26

 

아래 코드 중 gedit은 내장된 GUI 텍스트 편집기이므로, 다른 것으로 대체해도 무방

예를 들어 서버, 터미널(CUI) 환경이면 vi나 nano로 대체

 

root 계정은 sudo  안 쓰고 진행

 

[2024. 4 .26 추가]

Ubuntu 24.04 LTS가 어제 출시되어 설치해서 사용 중인데,

gedit이 사용이 안 되고, (설치는 하면 가능)

gnome-text-editor라는 이름으로 변경되었다.

따라서 gedit -> gnome-text-editor 으로 사용하거나

vi nano code 등으로 사용해야 한다.

 

 

윈도우, 우분투 듀얼 부팅시 필요한 설정

1. 우분투 시간 기준 변경

RTC로 변경

timedatectl set-local-rtc 1

* 윈도우, 우분투간 시간 기준이 달라서 윈도우 시간이 뒤로 밀리는 문제 해결

 

- 다시 UTC 사용하려면

timedatectl set-local-rtc 0

 

 

2. grub 부팅 순서 및 대기 시간 변경, 해상도 설정

sudo gedit /etc/default/grub

부팅 순서 - GRUB_DEFAULT (0이 가장 위, 0부터 순서대로 아래)

대기 시간 - GRUB_TIMEOUT (기본 설정 10초)

각각 변경

 

글씨가 너무 작게 나오면 #GRUB_GFXMODE=640x480를 찾아서

#을 없애고 원하는 해상도로 변경

GRUB_GFXMODE=1280x720

 

변경 완료했으면 저장 후

sudo update-grub

 

 

@ 듀얼 부팅 상태에서 우분투 삭제시 윈도우에서 GRUB bootloader 없애기 (UEFI Firmware)

1. BOOTICE 이용

Bootice - Download (softonic.com)

 

Bootice

Free Software for Data Users

bootice.en.softonic.com

BOOTICE.zip
0.86MB

UEFI 탭 → Edit boot entries 들어가서 ubuntu 삭제

(EFI 파티션에 있는 것을 삭제하는 것)

* 이 방법은 실제로 파일이 삭제되는 것은 아님

 

2. EFI 파티션 접근하여 직접 삭제

1. "관리자 권한"으로 터미널 실행

2. diskpart 입력

3. list vol 입력

4. 용량이 적고 FAT32인 볼륨이 EFI 파티션 - 여기서는 Volume 1이며, 아래에서 확인 후 밑줄친 부분에 볼륨 입력

5. select Volume 1 입력

6. assign letter=z (z는 할당할 드라이브 이름이므로 다른 알파벳 사용해도 무방)

7. exit 입력 (diskpart 종료)

8. cd Z:\EFI 입력

9. dir 입력하여 ubuntu 가 있는지 확인

10. rd ubuntu 입력하여 삭제

 

 

 

딥러닝, AI 개발 관련 기초 세팅 정리

1. build-essential 설치

sudo apt-get install build-essential

 

 

2. CUDA 다운로드 및 설치 (드라이버는 사전에 설치하고 진행해도 됨)

CUDA Toolkit Archive | NVIDIA Developer

 

 

3. CUDA 전역 환경변수 추가

선택 1. /etc/bash.bashrc 수정

sudo gedit /etc/bash.bashrc

 

선택 2. /etc/profile.d/ 에 추가

sudo gedit /etc/profile.d/cuda.sh

 

export PATH="/usr/local/cuda-12.1/bin${PATH:+:${PATH}}"
export LD_LIBRARY_PATH="/usr/local/cuda-12.1/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"

 

저장 후 재부팅(가장 확실한 방법)

 

 

4. cudnn 설치 (선택)

사용할 프로그램이 컴파일 후 설치되는 경우에는 nvcc 사용하므로 cudnn 설치 필요

* 아래 밑줄친 부분은 버전에 맞추어 변경

cudnn 압축 풀고 압축 푼 폴더에 들어가서

sudo cp ./include/* /usr/local/cuda-12.1/include

 

심볼릭 안 깨지도록

sudo cp -P ./lib/* /usr/local/cuda-12.1/lib64

 

모든 사용자에게 실행 권한 부여 (맨 뒤 * 포함)

sudo chmod a+r /usr/local/cuda-12.1/lib64/libcudnn*

 

- 버전 확인 (10 이하는 cudnn_version.h 대신 cudnn.h)

cat /usr/local/cuda-12.1/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

 

 

@ SSH 설정

SSH 서버 설치

1. sudo apt-get install openssh-server

 

포트 변경 (선택이나 권장)

2. sudo gedit /etc/ssh/sshd_config

3. #Port 22 에서 #지우고 포트 번호 변경

Port 23

ssh용으로 포트 여러 개를 개방하려면

아래에 연속해서 작성

Port 23

Port 24

작성 완료했으면 저장하고 에디터를 종료

4. ssh 서비스 재시작

sudo systemctl restart ssh

또는 sudo service ssh restart (구버전 호환)

5. 포트 개방 여부 확인

sudo systemctl status ssh

또는 sudo service ssh status

 

방화벽 활성화 (보안상 권장)

6. sudo ufw enable

* 비활성화는 sudo ufw disable

 

방화벽 포트 허용 (보안상 권장)

7. sudo ufw allow 23

밑줄친 부분은 위에서 개방한 포트에 맞추어 변경

특정 아이피만 허용하려면

sudo ufw allow from 192.168.0.1 to any port 23

특정 네트워크를 허용하려면

sudo ufw allow from 192.168.0.0/16 to any port 23

(/는 연속된 범위를 나타는 것이며 뒤의 숫자 16는 2^16을 뜻함.

아이피는 8비트 단위로 구성되므로 뒤 두 자리를 커버함)

* 삭제는

sudo ufw delete allow 23

sudo ufw delete allow from 192.168.0.1 to any port 23

8. sudo ufw status

정상적으로 반영되었는지 확인

 

 

@ Wake on LAN (WOL) 설정

바이오스나 WOL 관련 앱 설정과 별개이며,

바이오스에서 설정을 했더라도 우분투에서 WOL 관련 설정을 활성화해야 사용 가능

1. sudo apt-get install net-tools ethtool

2. ifconfig 로 연결한 인터페이스 이름 확인

밑줄친 부분은 2에서 확인한 인터페이스 이름으로 변경

2-1. sudo ethtool -s enp5s0 wol g

2-2. sudo ethtool enp5s0

2-3. Wake-on: g 인지 확인

 

위에서 한 설정이 껐다 켜지면 초기화되므로 서비스에 등록하여 설정 유지시킴

3. sudo gedit /etc/wol.sh

밑줄친 부분은 2에서 확인한 인터페이스 이름으로 변경

해당 스크립트는 Wake-on: g가 될 때까지 1초마다 반복시키는 코드

(딱 한 번 실행시키도록 서비스에서 직접 등록하는 코드는 실제로 작동하지 않음)

--------------------------

#!/bin/bash

ETH=enp5s0
STAT=0
while [ $STAT -lt 1 ]
do
    `/sbin/ethtool -s $ETH wol g`
    STAT=`ethtool $ETH | grep 'Wake-on: g' -c`
    echo $STAT
    sleep 1
done

--------------------------

 

그리고 실행 가능하도록 권한 변경

sudo chmod 755 /etc/wol.sh

 

4. sudo gedit /etc/systemd/system/wol.service

5. 아래 스크립트 입력 후 저장

밑줄친 부분은 2에서 확인한 인터페이스 이름으로 변경

--------------------------

[Unit]
Description=Enable Wake-up on LAN
After=network-online.target

[Service]
Type=oneshot
ExecStart=/etc/wol.sh

[Install]
WantedBy=multi-user.target

--------------------------

* 참고 스크립트 출처: https://viewise.tistory.com/entry/Ubuntu-2204-Wake-on-lan-%EC%84%A4%EC%A0%95-%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A1%9C-%EB%93%B1%EB%A1%9D%ED%95%98%EA%B8%B0

 

6. sudo systemctl enable /etc/systemd/system/wol.service

7. sudo systemctl start wol.service

* 삭제는

sudo systemctl disable wol.service

 

 

@ gcc, g++ 버전 관리 (선택)

우분투가 최신 버전일 때 컴파일러 관련 호환성 문제가 발생하는 경우 사용

- 버전별로 우선순위 지정 (아래는 예시)

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 800

 

- 아래 명령어로 gcc(g++) 입력때 사용할 버전 지정

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

 

 

 

겪었던 문제 해결 방법

1. tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero 고치기

- lspci | grep -i nvidia (gpu 주소 찾기) → 찾은 주소에 따라 아래 "00"을 바꿔서 진행

- echo 0 | sudo tee -a /sys/bus/pci/devices/0000\:00\:00.0/numa_node

- cat /sys/bus/pci/devices/0000\:00\:00.0/numa_node (반환값 0이 나오면 성공)

 

 

2. 우분투에서 윈도우에서 사용하는 디스크(NTFS) 쓰기 안 될 때

sudo ntfsfix /dev/nvme0n1p5

* 밑줄친 부분을 해당하는 디스크 주소로 변경하여 사용

 

 

3. [Ubuntu 22.04 이상] 주피터 노트북 접근 거부나올 때 (jupyter notebook permission denied)

* 22.04부터 보안 강화로 인한 권한 문제 발생하는 것으로 추정함

- 기본 내장된 firefox 제거 후 파이어폭스 홈페이지에서 직접 다운 받아서 설치

- 또는 크롬 등 다른 브라우저 사용

 

 

4. 우분투 소리 깨질 때

sudo alsa force-reload

 

 

5. 엔비디아 드라이버 설치시 Secure boot password 요구할 때

* 우분투 추가 드라이버 설치 기준

재부팅 후 그냥 boot하면 드라이버 설치 안 되고,

Enroll key 하고 진행

 

 

6. ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found

* 우분투 20.04, 아나콘다 2023-09 버전 환경

아래 명렁어로 확인해보면 GLIBCXX_3.4.29이 없음

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

다음 과정에 따라 libstdc++6 최신 버전으로 설치

sudo add-apt-repository ppa:ubuntu-toolchain-r/test 

sudo apt-get install libstdc++6

 

 

7. 인텔 유선랜, 무선랜(+블루투스) 안 되는 문제

* Ubuntu 20.04 Server 기준

단지 드라이버 문제로만 생각했지만, 리눅스 커널과 드라이버 모두에 해당하는 문제

대체로 Ubuntu Desktop이 Server판보다 드라이버를 잘 잡는데,

서버 버전에 비해 커널 버전이 대체로 높아서 그런 것으로 추정됨

 

내환경은 유선랜 Intel I225-V, 무선랜 Intel AX201 이고

유선랜은 인텔 공식 드라이버 팩인

https://www.intel.co.kr/content/www/kr/ko/download/15084/intel-ethernet-adapter-complete-driver-pack.html

 

완전한 드라이버 팩 인텔® 이더넷 어댑터

이 다운로드는 지원되는 OS 버전에 대한 인텔® 이더넷 어댑터 Complete Driver Pack 버전 28.3을 설치합니다.

www.intel.co.kr

여기에 지원하는 리눅스 드라이버가 없어서, 방법이 없는 줄 알았으나

커널 업데이트로 해결됨을 확인함

커널에 내장된 지원 드라이버가 다르고, 또 드라이버도 대응 가능한 커널 버전이 달라서 문제가 생기는 것

 

sudo apt-cache search linux-image

로 검색해서 뒤에 generic으로 끝나는 버전 중 장기 지원 버전이나, 최신 버전이나, 필요한 커널 버전을 찾아서,

예를 들어 linux-image-5.15.0-92-generic이면

 

sudo apt-get install linux-image-5.15.0-92-generic

이때 제안하는 패키지가 보이는데, n하고 이것들을 한 번에 같이 입력해서 설치

(왜인지 모르겠지만, 제안하는 패키지는 설치하지 않고

linux-image 설치 후 순차로 linux-headers 설치했을 때는

오히려 잡히던 유선랜도 안 잡히게 되었는데,

커널 제거 후 다시 설치할 때 제안하는 패키지를 다 넣고 설치하니까

문제 해결됨)

 

제안하는 패키지 일부는 없다고 나오는데 이것들은 지우면, 결과적으로 다음과 같은 형태로 설치 진행

(처음 제안하는 패키지를 포함시키면 또 다른 제안 패키지가 나오는데, 그것을 한 번만 더 추가시킨 것)

sudo apt-get install linux-image-5.15.0-92-generic fdutils linux-doc linux-hwe-5.15-source-5.15.0 linux-headers-5.15.0-92-generic linux-modules-extra-5.15.0-92-generic libncurses-dev ncurses-dev kernel-package

 

무선랜은

https://www.intel.co.kr/content/www/kr/ko/support/articles/000005511/wireless.html

 

인텔® 무선 어댑터용 Linux* 지원

Wi-Fi 어댑터를 포함한 인텔® 무선 제품에 대한 Linux* 드라이버 지원 정보.

www.intel.co.kr

위에 참고하되, 위에 링크는 처음 펌웨어라서 코드만 참고해서 아래 링크에서 펌웨어를 받아서 진행

https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/

 

kernel/git/firmware/linux-firmware.git - Repository of firmware blobs for use with the Linux kernel

 

git.kernel.org

가장 최신 버전 파일을 다운받아,

기종에 맞는 .ucode 파일들을

/lib/firmware 으로 이동

 

원래 여기까지 하고 재부팅하면 해결되야 하는데,

내 환경에서는 블루투스만 인식되고 무선랜은 여전히 문제가 있었고

 

dmesg | grep iwl

 

iwlwifi-so-a0-hr-b0-**.ucode

위 파일이 없다는 문제 발견

 

최신 버전 파일에는 위에서 나오는 가능한 파일(39~66)보다 윗 버전이라서

적당한 과거 시기 파일을 찾아서

iwlwifi-so-a0-hr-b0-64.ucode

를 /lib/firmware 에 넣고 재부팅하니 무선랜도 해결 완료

(66버전을 찾아서 넣으려고 했는데, 공개된 버전은 64 -> 68이라 66은 구할 수 없음)

iwlwifi (AX201).zip
15.86MB

 

 

 

UID, GID 확인 및 변경

1. UID 확인 방법

id -u

 

2. UID 변경 방법

* 변경 전 UID 확인

* 변경 후 반드시 파일 소유권 변경 필요

밑줄친 부분은 변경할 UID, 각 사용자 이름으로 변경

usermod -u 1001 user

 

3. GID 확인 방법

id -g

 

4. GID 변경 방법

* 변경 전 GID 확인

* 변경 후 반드시 파일 소유권 변경 필요

밑줄친 부분은 변경할 UID, 각 사용자 이름으로 변경

groupmod -g 1001 user

 

5. 파일 소유권 변경

find / -user 변경전UID -exec chown -h user {} \;

find / -group 변경전GID -exec chgrp -h user {} \;

* -h 옵션은 심볼링 링크의 소유권 변경 옵션

5번 출처 : https://blog.naver.com/koromoon/220577110840

 

 

 

기타

1. 우분투에서 NVIDIA GPU 전력 제한

* 밑줄 친 부분을 원하는 전력(W)만큼 변경

sudo nvidia-smi -pl 350

위는 모든 GPU를 350W로 전력을 제한한다는 것을 뜻함

 

특정 GPU만 전력 제한을 하려면

* 밑줄 친 i 뒤의 번호는 nvidia-smi를 했을 때 나오는 GPU 번호임

sudo nvidia-smi -i 0 -pl 350

두 개 이상인 경우, 예를 들어 0번, 1번이면

sudo nvidia-smi -i 0,1 -pl 350

 

 

2. 우분투에서 NVIDIA GPU overclock (+ fan control) 활성화

sudo nvidia-xconfig -a --cool-bits=28

 

(-a는 모든 gpu에 대해 설정하는 것)

 

우분투 22.04 이후 버전은

sudo gedit /etc/X11/Xwrapper.config

맨 아래에 추가

needs_root_rights=yes

 

* CLI로 사용하는 방법 (다만 GUI 환경 우분투가 아니면 X Server Setting이 없어서 동작하지 않는 것으로 보임)

sudo apt-get install cmake libx11-dev libxnvctrl-dev

git clone https://github.com/Tresorio/nvidia-oc

cd nvidia-oc

mkdir build

cd build

cmake ..

cmake --build .

sudo mv nvidia-oc /usr/bin

 

필요한 것들 설치

nvidia-oc 다운로드

빌드 디렉토리 생성

CMake 프로젝트 구성

CMake 프로젝트 빌드 (nvidia-oc 생성)

nvidia-oc를 터미널 기본 프로그램 폴더로 이동

 

사용법

* 밑줄 친 부분을 원하는 오프셋만큼 변경

nvidia-oc 100 1000

위는

Core clock(MHz) offset +100

Memory clock(MHz) offset +1000

을 뜻함

관련글 더보기

댓글 영역