내가 보려고 만든 Ubuntu 서버 세팅 명령어
by Cori※ 서버 작업하면서 참고하려고 작성한 포스트이기 때문에, 설명이 친절하지 않을 수 있음
※ 가끔가다 업데이트 진행 (최종 업데이트: 2022.10.31)
2023.01.28 - Jupyter Notebook 관련 설정 업데이트
0. 초기 설정
1) 패키지 업데이트
$ sudo apt update
$ sudo apt upgrade -y
$ sudo reboot
2) 기본 패키지 설치
$ sudo apt install tree -y
$ sudo apt install unzip -y
$ sudo apt-get install vim
$ sudo apt-get install gcc
$ sudo apt install net-tools
$ sudo apt-get install build-essential
$ sudo apt-get install python3-pip
$ sudo apt install ufw
3) ssh 서버 설정
$ sudo apt-get install ssh
$ sudo vi /etc/ssh/sshd_config
PermitRootLogin yes (기존 구문 주석 처리, 파일 종료)
$ sudo service ssh status
$ ps -ef | grep sshd
$ ifconfig
* local server에서 host key verification failed error 발생하는 경우
$ ssh-keygen -R 192.168.0.4
1. 간단하지만 유용한 명령어
$ nvidia-smi - NVIDIA 정보 조회
$ history - 명령어 로그 조회 # echo $HISTFILE 명령어를 통해 파일 위치 확인 후 조회할 수도 있음
$ clear - 화면 정리
$ cat /etc/issue - ubuntu 버전 조회
$ whereis [패키지] - 찾고자 하는 패키지 위치 조회
$ top - 스레드 현황 조회 # top -b -n 1 | grep zombie - 숫자만 간략히
$ ps -ef | grep defunct | grep -v grep - 좀비스레드 조회
$ sudo kill -9 / -15 [PID] - 좀비쓰레드 죽이기 # 9: 일반 종료, 15: 강제 종료
$ df -h - ubuntu 남은 용량 확인
$ sudo du -sh [파일 경로] - 디렉토리 파일 별 용량 조회
$ last - 시스템 접속 기록 조회 (로그인 & 로그아웃)
$ uname -n - 호스트 이름 출력
$ grep [사용자이름] /etc/passwd - 기본 셀 정보 확인
2. 사용자 추가 및 관리
1) 사용자
$ cat /etc/passwd - 전체 사용자 조회
$ sudo useradd [사용자이름] - 추가 세팅을 직접해야 함
$ sudo adduser [사용자이름] - 경로 생성부터 비밀번호 설정까지 편하게 할 수 있음
$ sudo deluser [사용자이름] - 사용자 삭제 (사용자가 접속중인 경우 삭제 불가)
$ sudo usermod -aG sudo [사용자이름] - 해당 사용자에 관리자 권한 부여 (not in sudoers 오류 해결)
$ sudo whoami - 내가 관리자 권한을 가지고 있는지 알 수 있음
$ vi /etc/group에서 sudo 그룹 사용자 삭제
$ ps -aux | grep -i pts/3 - 접속을 해제시킬 사용자 id 조회 (pts/3 옆 id 값)
$ kill -9 {사용자id}
2) 그룹
$ cat /etc/group - 현재 등록된 그룹 조회
$ groupadd (-g GID) [그룹 이름] - 그룹 추가하기 # -g: 원하는 그룹 번호 지정
$ groupmod -n group-2 group-1 - group-1 -> group-2로 변경
$ sudo usermod -a -G [그룹 이름] [사용자 이름] - 그룹에 사용자 추가
$ sudo usermod -g / -G [그룹 이름] [사용자 이름] - 사용자 그룹 변경 # -g: 기본 그룹 변경, -G: 추가 그룹 변경
$ sudo usermod -L [사용자이름] - 사용자 패스워드에 Lock을 걸어 로그인을 제한
$ sudo usermod -U [사용자이름] - 사용자에 걸린 Lock을 해제
$ sudo usermod -d [사용자이름] - 홈디렉토리 변경
$ sudo gpasswd -A [사용자이름] [그룹이름] - 사용자에 그룹의 관리자 권한 부여
* root 사용자가 특정 사용자에 그룹의 관리자 권한을 부여한 경우, 해당 사용자로 로그인 후
$ gpasswd [그룹이름] [패스워드] - 그룹의 패스워드 설정
$ gpasswd -a [사용자이름] [그룹이름] - 그룹에 사용자 추가
3. 접근 권한 설정
$ sudo chown (-R) [소유자 이름]:[그룹 이름] [폴더 이름] - 폴더의 소유자, 그룹 소유권 변경 # -R: 하위 파일에도 모두 적용
$ sudo chmod (-R) xxx [폴더 이름] - 해당 폴더의 권한 변경 # xxx: 소유자, 그룹, 일반 사용자 순서 (000, 770, ...)
4. Anaconda
0) 사이트
- https://www.anaconda.com/products/distribution
1) 서버에 이미 Anaconda가 설치되어 있는 경우 - 경로 설정
$ whereis conda
$ vi ~/.bashrc
마지막 줄에 export PATH=[conda 경로]:$PATH 추가 후 :wq
ex) export PATH=/home/ubuntu/anaconda3/bin/:$PATH
$ source ~/.bashrc # 파일 업데이트
$ conda --version # 잘 동작하는지 확인
2) 서버에 Anaconda가 없는 경우
0)의 사이트에서 관련 파일을 다운로드하고, 서버에 업로드
$ bash Anaconda~.sh # sh 파일 실행하기
3) 가상환경 관련
$ conda env list - 가상환경 조회
$ conda create -n [가상환경이름] python=[버전] - 가상환경 생성
$ conda activate [가상환경이름] - 가상환경 활성화
$ conda deactivate - 가상환경 비활성화
$ conda remove --name [가상환경이름] --all - 가상환경 삭제
$ conda list --export > [경로/파일명.txt] - 지정한 경로에 가상환경에 설치된 라이브러리들을 파일로 저장
$ conda env export -n [가상환경이름] > [가상환경이름.yml] - 가상환경의 이름과 패키지들을 추출
$ conda env create -f [가상환경이름.yml] - 추출한 가상환경을 가지고 새로운 가상환경 생성
$ conda create -n [새로운 가상환경이름] --clone [기존 가상환경이름] - 가상환경 복제
5. github
0) git 설치 및 초기 설정
$ sudo apt-get install git-core # git 설치
$ git --version # git 버전 확인
$ git config --global user.email [github 이메일주소] # ex) A@naver.com
$ git config --global user.name [github 사용자이름] # ex) A
$ git config -l # git config 정보 확인
1) git 연동
$ cd [github와 연동할 디렉토리]
$ git init # 새로운 git 로컬 저장소로 지정
2) git-lfs설치
$ sudo apt install curl
$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
$ sudo apt-get -y install git-lfs
$ sudo apt update
$ sudo apt -y install git-lfs
6. Jupyter Notebook
0) Jupyter Notebook 설치 및 삭제
$ pip install jupyter notebook
$ jupyter notebook --generate-config # 환경파일 생성
$ jupyter notebook password # 비밀번호 설정
$ pip install pip-autoremove
$ pip-autoremove jupyter -y
$ pip-autoremove jupyter-core -y
$ pip freeze | grep jupyter
1) Config 파일 설정 - 2022.10.31 update
Ipython # 파이썬 콘솔 창 실행
from notebook.auth import passwd
passwd() # 해당 명령어로 나온 해시 값 복사
exit()
jupyter notebook --generate-config # 경로 확인
vi [확인한경로/~config.py # 환경 설정 파일
c = get_config()
c.NotebookApp.allow_origin = '*'
c.NotebookApp.notebook_dir = '/home/~'
c.NotebookApp.port = '8888'
c.NotebookApp.password = u'위에서 복사한 해시 값'
:wq # 변경 사항 저장
2) Jupyter Notebook 접속
$ jupyter notebook --ip=[ip주소] --port=[포트번호] --allow-root # ip주소는 보통 0.0.0.0 입력해서 접속함
3) Jupyter Notebook 경고 메시지 관련
import warnings
warnings.filterwarnings(action='ignore') # 경고 메시지 무시
warnings.filterwarnings(action='default') # 경고 메시지 표시
4) 방화벽 관련
$ sudo ufw status
$ ufw app list # output: OpenSSH
$ ufw allow 8888
$ ufw enable # - 미확인
7. ssh 접속 시간 설정
$ whereis ssh - ssh 파일 위치 조회 # /etc/ssh
$ cd /etc/ssh
$ chown [사용자이름]:[그룹이름] sshd_config - 해당 파일 접근을 위해 접근 권한 임시 변경
$ vi sshd_config - 파일 수정
해당 파일에서
ClientAliveInterval 주석 해제 후 값 전달 (600 -> 600s)
ClientAliveCountMax 주석 해제 후 값 전달 (3 -> 3번 count)
위처럼 설정할 경우 600s x 3 = 1800s (30 min) 동안 접속 유지됨. 이후 파일 빠져나오기
$ chown [root]:[root] sshd_config - 접근 권한 원상 복구
$ sudo systemctl restart ssh - ssh 재시작
8. KoBERT, KoELECTRA 실행환경 구축
$ pip install tensorflow-gpu
$ pip install environment_kernels
$ pip install pandas
$ pip install scikit-learn
$ conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch -y
$ pip install transformers
$ pip install pymysql
$ pip install matplotlib
$ pip install seqeval
$ pip install fastprogress
$ pip install attrdict
$ pip install torchmetrics
$ pip install git+https://git@github.com/SKTBrain/KoBERT.git@master
* CUDA Error: no kernel image error가 발생하는 경우
다음 사이트에서 Compute Capability 확인 - https://developer.nvidia.com/cuda-gpus
$ export TORCH_CUDA_ARCH_LIST=compute capability # export TORCH_CUDA_ARCH_LIST=8.0
$ conda uninstall torch # 기존 torch 삭제
$ conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch -y
* Tensorflow 설치 후 import tensorflow 해도 오류가 발생하고, import 되지 않는 경우
$ pip uninstall tensorflow-gpu==1.15.0
$ python -m pip install --upgrade pip
$ pip install tensorflow-gpu==1.15.0
9. MySQL
0) MySQL 설치
$ sudo apt install mysql-server -y # mysql 설치
$ sudo ufw allow mysql # 외부 접속 기능 설정 (포트 3306 오픈)
$ sudo systemctl start mysql # Mysql 실행
$ sudo systemctl enable mysql # Mysql 접속 허용
$ sudo service mysql stop # MySQL 서버 중지
$ sudo service mysql start # MySQL 서버 실행
1) 사용자, 테이블, 데이터베이스 조회
$ sudo /usr/bin/mysql -u root -p (or) sudo mysql -u root -p # mysql 서버 접속 (비밀번호: ubuntu 접속 비밀번호)
SHOW DATABASES; # 데이터베이스 조회
SELECT DATABASE(); # 현재 사용중인 데이터베이스 조회
SELECT user, host from mysql.user; # 사용자 조회
USE [데이터베이스명]; # 사용중인 데이터베이스 변경
SHOW TABLES; # 데이터베이스에 추가되어 있는 테이블 조회
DESC [테이블명]; # 테이블의 스키마 조회
SHOW PROCEDURE STATUS; # 프로시저 조회
2) 데이터베이스, 테이블, 사용자 생성
# root@localhost 비밀번호 설정
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
CREATE USER '[사용자이름]' identified by '[비밀번호]'; # mysql 사용자 생성
- '[사용자 이름]'@'%': 모든 원격지에서 접속 가능
- '[사용자 이름]'@'192.168.%': 특정 ip에서 접속 가능
ALTER USER '[사용자이름']@[server명] IDENTIFIED BY '[비밀번호]'; # 사용자 비밀번호 변경
DROP USER [user명]@[server명]; # mysql 사용자 삭제
3) 권한 관련
SHOW GRANTS FOR 'userId'@'192.168.xxx.xxx'; # 사용자 권한 조회
GRANT ALL PRIVILEGES ON [데이터베이스 이름].* to [사용자이름]@[localhost] # 사용자에 해당 데이터베이스의 모든 권한 부여
FLUSH PRIVILEGES; # 계정 권한 업데이트
REVOKE ALL PRIVILEGES ON devdb.* TO 'userId'@'192.168.xxx.xxx'; # 사용자 권한 회수
4) python과 mysql 연동
$ conda install pymysql # python에서 MySQL 접속을 위한 툴 설치
# python 파일 실행, MySQL 접속
$ conn = pymsql.connect(host='호스트명', user='사용자명', password='비밀번호', db='데이터베이스이름', charset='utf8')
$ curs = conn.cursor() # 커서 생성
$ sql = 'sql 구문;' # 실행할 SQL문 작성
$ curs.execute(sql) # SQL문 실행
$ curs.fetchall() # SQL 문이 SELECT, DELETE, INSERT 등인 경우 실행
$ curs.close()
$ conn.commit() # 이거를 해줘야 변경상황이 업데이트 됨 !
$ conn.close() # 접속 종료
10. 방화벽
1) 서버 접속 방화벽
필요 정보: 출발지 IP Address, 목적지 IP Address, 포트 번호, 프로토콜(TCP/UDP)
* 출발지 IP Address는 사설 IP 주소가 아닌, 공인 IP 주소가 필요함
2) 주피터 접속 방화벽
필요 정보: 출발지 IP Address, 목적지 IP Address, 포트 번호, 프로토콜 (TCP/UDP)
* 서버 내 가상환경에서 주피터 노트북 접속시에 설정하는 방화벽 정보도 포트 번호(8888)를 제외하면 서버 접속 방화벽과 동일
* 포트 번호를 여러 개 설정하여 각 계정별로 다른 포트로 접속하여 주피터 노트북 사용할 수 있음
11. NUMA(Non-Uniformed Memory Access)
* tensorflow를 이용한 GPU 사용 도중, successful NUMA node read from SysFS had negative value (-1) 오류 발생
1) 노드 확인
$ lspci | grep -i nvidia - NVIDIA GPU 번호 조회 (00:06.0)
2) NUMA 설정 값 확인 및 변경
$ cd /sys/bus/pci/devicecs/
$ ls # NUMA 노드 조회 - 위에서 확인한 00:06.0이 보이며, 앞에 0000: 이 붙은 것을 볼 수 있음
$ cat /sys/bus/pci/devices/0000\:00\:06.0/numa_node - -1: 연결 x, 0: 연결 o
$ echo 0 | sudo tee -a /sys/bus/pci/devices/0000\:00\:06.0/numa_node # NUMA 노드 연결하기
$ cat /sys/bus/pci/devices/0000\:00\:06.0/numa_node - 다시 조회
♣ 참고 자료
https://m.blog.naver.com/jesang1/221993846056
https://languagestory.tistory.com/m/135
https://kig6022.tistory.com/14
https://bluecolorsky.tistory.com/71
https://lapina.tistory.com/m/137
'CS > Server' 카테고리의 다른 글
Amazon ec2 instance 기본 세팅하기 (0) | 2024.03.11 |
---|---|
EC2 Setting (2) | 2024.01.03 |
Window 딥러닝 서버 세팅 일지 (0) | 2023.02.24 |
Ubuntu 딥러닝 서버 세팅 일지 (0) | 2023.02.06 |
VSCode를 이용한 Ubuntu 원격 서버 접속 (0) | 2022.10.04 |
블로그의 정보
코딩하는 오리
Cori