지난 글에서 언급했던 Ubuntu Server 20.04 LTS를 설치하고 설정하면서 정리한 내용을 써 보았습니다.
서버버전은 아직 써 본 적이 없어서 정리해 두는 것이 나중에 찾아보기가 쉬울것 같네요.
OS 설치 자체는 인터넷에서 검색하면 이미 많이 찾을 수 있으니 그냥 넘어가도록 하겠습니다.
먼저 우분투 서버버전을 설치한 디스플레이 없는 노트북의 사양을 살펴보죠.
노트북의 모델은 Acer의 AO756 1007Ckk이며 셀러론 1007U 1.5GHz의 듀얼코어 CPU와 4GB의 메모리, 500GB의 HDD를 장착한 모델입니다.
2012년쯤 판매되던 저가형 노트북이니 약 8년이 지났군요.
뭐... 메인 개발시스템으로 사용하고 있는 노트북도 2012년쯤에 구매한 한성컴퓨터 SPARQ X53 lv.77 모델이니까.. 둘 다 약 8년이 지난 셈이네요.
그래도 아직 잘 돌아가고 있습니다.
우분투 서버 버전을 다운로드 받으려니 Legacy 버전과 Live 버전이 있더군요.
Legacy 버전과 달리 Live 버전은 스냅샷 기능 등 몇 가지의 기능에 제한이 있다고 하길래 Legacy 버전을 다운로드하여 설치했으나.. 어찌된 일인지 제 노트북에서는 부팅이 안되더군요.
몇 번 재 설치하면서 살펴봤으나 결국 실패, Live 버전을 설치하였습니다.
Live 버전은 잘 동작하더군요.
설치가 끝난 후, 몇 가지 설정했던 내용을 살펴봅시다.
가장 먼저 Root 계정을 활성화 합니다.
방에서 혼자 사용할 서버이기때문에 크게 의미는 없지만 그래도 보안을 위해서..
$ sudo passwd root
다음으로 인터넷 연결을 확인해야 합니다.
다른 PC 등의 단말과의 접속도 문제지만 필요한 프로그램의 설치와 시스템의 업데이트 등을 위해서는 필수 작업이죠.
데스크탑 버전의 경우 GUI로 모든 작업이 가능하기때문에 네트워크의 설정에 문제가 없었지만 모든 작업을 콘솔로 하려니 처음에는 막막하더군요.
분명히 서버 버전을 처음 설치할 때 네트워크의 설정도 함께 진행했는데 OS 설치 후 처음 부팅해보니 네트워크가 비활성화 되어 있네요.
그런데 인터넷을 뒤져보면 먼저 업데이트를 해 줘라, ifconfig로 설정상태를 확인해라... 등등 다양한 글을 찾을 수 있는데... 여기서는 아무 소용이 없는 내용입니다.
아예 인터넷을 포함하여 외부 네트워크로 접속 자체가 안되는데.. 아무것도 할 수 없거든요.
그래서 먼저 netplan을 이용하여 네트워크 설정부터 관리합니다.
우분투 18.04 버전부터는 네트워크의 관리를 위하여 netplan 이라는 것을 사용합니다.
역시 인터넷을 뒤져보면 netplan을 이용하여 고정IP를 구성하는 방법.. 등의 내용이 많이 나오는데.. 현재 내 컴퓨터가 어떤 설정을 가지고 있는지 확인이 안되는 상황이죠.(ifconfig 따위의 프로그램도 안깔려있습니다.)
그래서 생각한 것이 일단 DHCP 기능을 이용하여 인터넷 연결부터 수행하자.. 입니다.
$ nano /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
enp4s0f0:
dhcp4: true
version: 2
$ sudo netplan apply // 변경된 내용 적용
$ reboot // 안전하게 재부팅하자
위의 방식으로 DHCP를 설정하여 적용할 수 있습니다.
재부팅을 하고 나니 인터넷이 연결되어 있는 것을 확인할 수 있었습니다.
여기서 잠깐... 위의 코드에 사용된 enp4s0f0은 서버에 설치된 네트워크(이더넷)의 이름인데.. 어떻게 알았을까요?
$ ls /sys/class/net
enp4s0d0 lo
ls 명령을 이용하여 확인할 수 있습니다.
그 외에도 "$ ip a"라는 명령을 이용하여 확인하실 수 있습니다.
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp4s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
inet 192.168.0.100/24 brd 192.168.0.255 scope global enp4s0f0
valid_lft forever preferred_lft forever
inet6 ****::****:****:****:****/64 scope link
valid_lft forever preferred_lft forever
그리고 00-installer-config.yaml은 OS를 설치할 때 입력했던 내용이 저장되어 있는 파일이며 시스템마다 다른 이름일 수 있습니다.
$ ls /etc/betplan
00-installer-config.yaml
위와 같이 확인하실 수 있습니다.
자.. 그럼 인터넷 접속을 확인했으니 가장 필요한 작업부터 해 나갑니다.
일단 최신 업데이트부터 실행해서 시스템의 상태를 최신으로 유지합니다.
$ sudo apt update
$ sudo apt upgrade
아.. 여기서 또 잠깐..
인터넷을 검색해보면 많은 경우, apt-get을 사용하고 있는데 저는 apt를 사용했습니다.
원래 apt-get이 먼저 나온 패키지 관리자인데 apt-get과 apt-cache를 하나의 명령어로 사용하기 위해 새롭게 만들어진 패키지 관리자가 apt입니다.
기능은 둘 다 거의 같습니다.
제가 apt를 사용하는 이유는 그냥 명령어가 짧아져서..
다음으로 net-tools 등의 필요한 도구를 설치합니다.
드디어 ifconfig 등의 명령어들도 사용할 수 있겠네요.
$ sudo apt install net-tools
그리고 이전 글에서 소개했듯이.. 서버로 사용하는 노트북은 디스플레이가 없습니다.
(누나가 자기 노트북을 실수로 밟아서 깨먹는 바람에.. 제것과 바꿔줬습니다. 제 서브노트북과 같은 모델이거든요)
그래서 모니터를 연결해야 하는데.. 메인 노트북이 그 모니터를 같이 사용하다보니 점점 귀찮아졌습니다.
이런 이유로 아예 모니터는 포기하고 SSH로 외부에서 접속하여 사용할 것입니다.
어차피 GUI도 없는 서버 버전이라 터미널로 접속하면 똑같습니다.
먼저 SSH 접속을 위해 해당 패키지가 잘 설치, 설정되어 제대로 동작하는지 확인해봅시다.
$ dpkg -l | grep ssh
ii libssh-4:amd64 0.9.3-2ubuntu2.1 amd64 tiny C SSH library (OpenSSL flavor)
ii openssh-client 1:8.2p1-4ubuntu0.1 amd64 secure shell (SSH) client, for secure access to remote machines
ii openssh-server 1:8.2p1-4ubuntu0.1 amd64 secure shell (SSH) server, for secure access from remote machines
ii openssh-sftp-server 1:8.2p1-4ubuntu0.1 amd64 secure shell (SSH) sftp server module, for SFTP access from remote machines
ii ssh-import-id 5.10-0ubuntu1 all securely retrieve an SSH public key and install it locally
여기에서 openssh-server이 제대로 설치되어 있는지 확인하면 됩니다.
데스크탑 버전에서 확인하셨다면 openssh-client 만 설치되어 있을 것입니다.
만약 openssh-server가 설치되어 있지 않다면 설치해 주세요.
$ sudo apt install openssh-server
설치가 확인되었으면 제대로 동작하고 있는지 프로세스를 확인해 봅니다.
$ service ssh status
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-08-29 03:41:02 UTC; 4 days ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 694 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 725 (sshd)
Tasks: 1 (limit: 4425)
Memory: 7.5M
CGroup: /system.slice/ssh.service
└─725 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
Aug 29 03:41:02 webserver sshd[725]: Server listening on :: port 22.
Aug 29 03:41:02 webserver systemd[1]: Started OpenBSD Secure Shell server.
Aug 29 04:13:12 webserver sshd[1106]: Accepted password for **** from 192.168.0.101 port 40220 ssh2
Aug 29 05:36:00 webserver sshd[1350]: Accepted password for **** from 192.168.0.101 port 45156 ssh2
Aug 29 09:22:36 webserver sshd[1784]: Accepted password for **** from 192.168.0.101 port 34954 ssh2
Aug 31 12:59:15 webserver sshd[4995]: Accepted password for **** from 192.168.0.101 port 35502 ssh2
Aug 31 12:59:15 webserver sshd[4995]: pam_unix(sshd:session): session opened for user **** by (uid=0)
Aug 31 13:06:51 webserver sshd[5139]: Accepted password for **** from 192.168.0.102 port 53842 ssh2
Sep 02 20:15:24 webserver sshd[8453]: Accepted password for **** from 192.168.0.101 port 36022 ssh2
Sep 02 20:21:34 webserver sshd[8595]: Accepted password for **** from 192.168.0.102 port 50384 ssh2
$ ps -ef | grep ssh
root 725 1 0 Aug29 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root 8453 725 0 20:15 ? 00:00:00 sshd: **** [priv]
**** 8564 8453 0 20:15 ? 00:00:00 sshd: ****@pts/0
root 8595 725 0 20:21 ? 00:00:00 sshd: **** [priv]
**** 8679 8595 0 20:21 ? 00:00:00 sshd: ****@pts/1
**** 8718 8680 0 20:45 pts/1 00:00:00 grep --color=auto ssh
$ sudo netstat -ntlp | grep sshd
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 8679/sshd: ****
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 725/sshd: /usr/sbin
tcp6 0 0 ::1:6010 :::* LISTEN 8679/sshd: ****
tcp6 0 0 :::22 :::* LISTEN 725/sshd: /usr/sbin
셋 중에 하나만 하시면 됩니다.
만약 동작을 하지 않고 있다면 ssh 서비스를 시작합니다.
$ service ssh start // 서비스 종료는 start 대신 stop을 사용
자... 이제 설정이 끝났습니다.
그럼 다른 컴퓨터에서 접속을 해 봅시다.
윈도우 시스템의 경우는 putty, XShell 등의 SSH 클라이언트 프로그램을 통해서 접속할 수 있고 리눅스나 맥 등에서는 터미널을 이용하여 접속할 수 있습니다.
(윈도우에서도 2019년 7월 GitHub를 통해서 터미널을 개발, 공개 했죠. 그것을 사용하셔도 됩니다.)
$ ssh ****@192.18.0.100
위에서 netplan을 이용하여 DHCP를 설정했었죠?
외부 단말에서 서버로 접속하려면 IP를 사용해야 하는데 DHCP를 사용하면 서버를 재부팅할 때마다 IP가 바뀝니다.
그래서 서버의 경우는 고정 IP로 만들어 줄 필요가 있습니다.
$ sudo nano /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
enp4s0f0:
addresses: [192.168.0.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8]
search:
- webserver
version: 2
그럼 마지막으로 윈도우 시스템과 파일 공유, 전송을 위해서 samba 패키지를 설치, 설정해 봅시다.
먼저 samba를 설치하고 환경을 설정합니다.
sudo apt install samba
$ sudo smbpasswd -a 계정명
$ sudo nano /etc/samba/smb.conf
----[smb.conf]---------------------------------
[multimedia]
comment = Shared Directory
path = /data/shared
valid users = id1, id2
writeable = yes
read only = no
create mode = 0777 // 777은 모든 권한. 실제로 필요한 권한만 지정하면 됨
directory mode = 0777
-----------------------------------------------
$ sudo service smbd restart // Samba 서비스 재시작
samba 서비스가 시작되면 외부의 시스템에서도 서버에 공유된 파일을 사용할 수 있습니다.
이렇게 우분투 서버의 설치와 설정이 끝났습니다.
이 후에도 서버를 관리, 사용하면서 알게 된 내용들을 그 때마다 정리하도록 하겠습니다.
'기타 기술 > 시스템 설정' 카테고리의 다른 글
딥러닝 서버 환경 구축(4): 텐서플로우 2.x를 위해서 그냥 virtualenv로.. (0) | 2020.09.15 |
---|---|
딥러닝 서버 환경 구축(3): 텐서플로우 2.x 와 아나콘다-주피터노트북의 문제점 (0) | 2020.09.13 |
딥러닝 서버 환경 구축(2): 파이썬-아나콘다, 텐서플로우, 파이토치 (0) | 2020.09.08 |
딥러닝 서버 환경 구축(1) : CUDA (0) | 2020.09.04 |
시스템 정비 (0) | 2020.08.29 |