Raspberry Pi 3 64bit OS openSUSE LEAP 15: Install

2017-10-30: swap 추가, timezone 수정
{:.right-history}

Opensuse 에서 Raspberry Pi 3를 위한 64bit OS openSESE Leap 42.2 을 제공하고 있다.

이글은 5개 글타래로 구성되며, openSUSE 설치 및 사용에 대해 작성한다.

  1. Install 64bit openSUSE Leap 42.2 / JeOS
  2. openSUSE: Managing Service daemon
  3. openSUSE: Basic OS Security for Server
  4. Install & Configuration - Nginx, Node JS, Jupyter
  5. openSUSE: Build MongoDB 3.4.x

Install 64bit openSUSE Leap 42.2 / JeOS

openSUSE는 Raspberry Pi 3를 위한 Opensuse community edition은 정식 버전 Leap 42.2 image, 개발버전 Tumbleweed image, 커뮤니티버전 non-upstream openSUSE Tumbleweed image* 으로 구성되어 있다.

이들 버전은 용도에 따라 JeOS, E20, LXQT X11 이미지로 다운받을 수 있다.


### Download and Install

Download Page 의 두번째 Installing the 64-bit openSUSE Leap image 단락에 있는 JeOS image 를 다운로드 한다.

Writing image to SD Card

Etcher 등을 이용해서 다운받은 이미지 파일을 SD Card에 쓴다.

{:width=”640”}

dd 를 사용한다면,

다운받은 .xz 파일을 dd 를 이용해서 SD Card에 쓴다.

1
xzcat openSUSE-Leap42.2-ARM-JeOS-raspberrypi3.aarch64.raw.xz | sudo dd of=/dev/rdisk1 bs=4m; sync

#### Serial console

여기서는 Serial console에서 네트워크 확인 및 초기 설정을 하고 ssh 로 서버에 로그인해서 시스템 구성을 진행한다.

SD Card를 라즈베리파이에 꽃고 HDMI, Keyboard 및 Mouse 가 별도로 준비되어 있으면 직접 모니터를 보고 작업을 진행하면 좋다.

USB to Serial 케이블을 사용해서 Raspberry Pi의 Serial Console에 연결한다.

{:width=”640”}

그리고 시리얼 포트를 통해 tty 연결을 위해 터미널 프로그램에서 baud rate 115200 으로 연결한다. 아래는 macOS의 screen CLI 명령으로 usb serial 포트에 연결하고 있다.

1
$ screen /dev/cu.usbserial 115200

이제 SD Card를 넣고 부팅을 하면, 터미널에 부트 단계가 진행되고 처음 5분 정도 소요된다.

{:width=”640”}

Raspberry Pi를 위한 이미지는 처음 계정은 root/linux 이다.

터미널에서 uname 은 aarch64 임을 확인 할 수 있다.

1
2
root# uname -a
Linux homepi 4.4.90-18.32-default #1 SMP Fri Oct 6 13:30:08 UTC 2017 (465b410) aarch64 aarch64 aarch64 GNU/Linux

처음으로 라즈베리파이에서 64bit 환경으로 운영해 볼 수 있게 됐다.



### 설치 후 서버 구성을 위해 할 일

JeOS를 서버로 구성하기 위해서 다음 같은 작업을 수행해 준다.

  • root 패스워드 변경
  • sudoer 사용자 생성
  • DHCP를 고정 IP로 변경

root 패스워드

root 사용자의 패스워드를 변경한다.

{:width=”640”}

Update

Ubuntu/Debian 계열의 패키지 명령 apt,apt-get 과 비슷한 openSUSE 명령라인 패키지 관리자는 zypper 가 있다.

1
2
3
4
5
6
7
8
9
zypper help search     # to print help for the search command
zypper refresh, ref # Refresh all repositories.
zypper update, up # to update all installed packages
zypper lp # to see what patch updates are needed
zypper patch # to apply the needed patches
zypper se sqlite # to search for sqlite
zypper rm sqlite2 # to remove sqlite2
zypper in sqlite3 # to install sqlite3
zypper in yast* # to install all packages matching 'yast*'

머저 최신 소프트웨어 목록으로 업데이트 한다.

1
2
zypper refresh
zypper ref

그리고 최근 업그레이드된 필요한 패키지를 다운로드하고 설치한다.[^1]

1
2
zypper update
zypper up

지원중단된 패키지, 나뉘어진 패키지 등의 의존성을 고려한 업그레이드를 하려면 dup 명령을 사용한다.>

1
2
zypper dup             # distribution upgrade
zypper dist-upgrade
upgrade 후에

실행중인 데몬을 재시작해줄 필요가 있는데 zypper ps -s 를 실행하면 목록을 표시해 준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
pi64:/home/ # zypper ps -s
The following running processes use deleted files:

PID | PPID | UID | User | Command | Service
------+-------+------+------------+----------------------------+-------------------
307 | 1 | 0 | root | systemd-journald (deleted) | systemd-journald
484 | 1 | 0 | root | auditd | auditd
502 | 1 | 1000 | qkboo | python3 | jupyter
513 | 1 | 499 | messagebus | dbus-daemon (deleted) | dbus
525 | 1 | 0 | root | systemd-logind (deleted) | systemd-logind
529 | 1 | 0 | root | agetty (deleted) | getty@tty1
996 | 1 | 0 | root | cupsd | cups
1018 | 1 | 0 | root | cron | cron
1043 | 1 | 74 | ntp | ntpd | ntpd
1047 | 1043 | 74 | ntp | ntpd | ntpd
1145 | 1 | 0 | root | python2.7 | fail2ban
1146 | 1 | 1000 | qkboo | node | pm2-qkboo
2131 | 1 | 0 | root | agetty (deleted) | serial-getty@ttyS0
5716 | 1146 | 1000 | qkboo | node | pm2-qkboo
5749 | 1146 | 1000 | qkboo | node | pm2-qkboo
12400 | 1 | 0 | root | sshd (deleted) |
12402 | 1 | 1000 | qkboo | systemd (deleted) |
12405 | 0 | 1000 | qkboo | systemd (deleted) |
12411 | 12400 | 1000 | qkboo | sshd (deleted) |
12412 | 12411 | 1000 | qkboo | bash |
12783 | 12412 | 0 | root | sudo |
12784 | 12783 | 0 | root | bash |
12876 | 1 | 0 | root | nginx | nginx
12879 | 12876 | 494 | nginx | nginx | nginx
12880 | 12876 | 494 | nginx | nginx | nginx
12881 | 12876 | 494 | nginx | nginx | nginx
12882 | 12876 | 494 | nginx | nginx | nginx
15908 | 502 | 1000 | qkboo | node | jupyter
15916 | 15908 | 1000 | qkboo | node | jupyter
26929 | 502 | 1000 | qkboo | node | jupyter

ip 주소 확인

ifconfig 명령으로 현재 IP Address를 확인하고 이 IP Address에 ssh 를 사용해 접속한다.

1
2
3
4
5
6
7
8
9
10
11
linux:~ # ifconfig
eth0 Link encap:Ethernet HWaddr B9:40:EB:BA:10:02
inet addr:192.168.1.104 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe90::ba37:ebff:feba:1012/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:83136 errors:0 dropped:0 overruns:0 frame:0
TX packets:27300 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:120797947 (115.2 Mb) TX bytes:2369690 (2.2 Mb)
linux:~ #
linux:~ # shutdown now

좀더 편리한 사용을 위해 ifconfig 명령으로 찾은 IP address에 ssh 로그인을 해서 작업을 진행한다.

1
$ ssh root@192.168.1.104


### 시스템 설정

이제 sudoer 사용자로 시스템을 서버에 적합하게 구성해 보자.

  • sudoer 추가
  • yast 소개
  • timezone
  • Network 구성: 호스트 이름, IP 주소
  • swap 개선
  • yast로 사용자 추가

sudoer

root 사용자가 아닌 일반사용자를 sudoer로 등록해 관리자 기능을 대행 할 수 있다. 그러기 위해서 먼저 사용자를 추가한다. openSUSE yast라는 시스템 도구로 할 수 있지만 여기선 useradd 명령을 사용해서 사용자 추가한다. useradd에 대해서는 useradd 명령을 참조한다.

useradd 는 홈 디렉토리, 쉘 등에 대한 옵션을 주고 사용자를 등록한다.

  • 추가한 사용자를 /etc/passwd, /etc/shadow, /etc/group and /etc/gshadow 추가
  • 그리고 -m 옵션으로 으로 사용자 홈 디렉토리 까지 생성한다.
1
root#  useradd -m foo

그리고 패스워드를 등록한다.

1
2
3
4
root# passwd foo
New password:
Retype new password:
passwd: password updated successfully

sudoer 등록

visudo 명령으로 /etc/sudoers 파일을 편집한다.

1
$ sudo visudo

sudoer 파일에 있는 User privilege 항목 아래에 새로운 사용자 foo를 아래 같이 등록한다.

1
2
3
# User privilege specification
root ALL=(ALL) ALL
foo ALL=(ALL) ALL

이제 root에서 로그아웃하고 새로 추가한 사용자로 로그인한다.

1
2
3
4
$ ssh foo@192.168.1.104
Password:
Have a lot of fun...
foo@linux:~>

openSUSE는 관리자용 명령을 직접 내리면 찾지 못한다고 한다.

1
2
foo@linux:~> yast2 timezone
-bash: yast2: command not found

그리고 처음으로 sudoer 사용자가 관리자 권한이 필요한 명령을 사용하기 위해 sudu 로 명령을 내리면 아래 같은 경고가 나온다.

1
2
3
4
5
6
7
8
foo@linux:~> sudo /sbin/yast2 timezone

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

openSUSE는 시스템 관리 도구로 yast 를 사용해서 소프트웨어 설치, 네트워크 구성, 시간 관리, 보안 및 사용자 등을 다루는 소프트웨어로 GUI와 CLI 모두 사용할 수 있다.

시스템 네트워크를 구성하기 위해서 yast 명령을 사용해보자,

yast

yast는 GUI 혹은 ClI에서 사용이 가능하다 . 다음은 sudo yast 를 실행하면 Ncurse 로 표시되는 yast 화면이다.

{:width=”640”}

TAB 키로 각 항목을 이동할 수 있고, Enter로 실행한다. 전체 화면에서 F9는 Cancel, F10은 OK 기능을 수행한다.

Timezone

처음 설치후 CET 시간대로 되어 있어서 Asia/Seoul로 변경하고자 한다.

1
2
linux:~ # date
Sun Oct 29 09:19:31 CET 2017

시스템 시간대를 설정하려면 yast 를 시작해 System -> Date and Time 을 실행해 시간대를 지정한다. 혹은 yast timezone 모듈 명령을 주면 해당 Date and Time 화면으로 이동할 수 있다.

{:width=”640”}

시간대를 변경후 확인해 보면,

1
2
linux:~ # date
Sun Oct 29 17:22:11 KST 2017

ntp로 동기화하려면 Other Settings… 항목을 선택해 ntp server 를 설치하고 활성화 한다.

{:width=”640”}
{:width=”640”}