Raspberry Pi 4에 Ubuntu 20.04 LTS 및 Docker 설치
3행 정리
1. 소개
2020년 4월 23일에 「Ubuntu 20.04 LTS」(개발 코드: Focal Fossa)가 릴리스 되었습니다.
Kubernetes 환경을 업데이트하기 위해 Ubuntu 20.04 LTS를 Raspberry Pi 4에 설치하고 Docker를 설치했습니다.
특히 문제에는 조우하지 않았습니다만, 일단 기록해 둡니다.
2. 구성
이번 구성은 다음과 같습니다.
이미지의 기입은, macOS 10.14.6(Mojave) 환경에서 실시했습니다.
mac$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.6
BuildVersion: 18G103
3. Ubuntu Server 이미지 다운로드
Raspberry Pi용 "Ubuntu Server"의 이미지 "Install Ubuntu Server on a Raspberry Pi 2, 3 or 4"에서 다운로드합니다.
xz
형식으로 압축되어 있지만, 후술하는 「Raspberry Pi Imager」를 사용하는 경우, 전개는 불필요합니다.이번 다운로드한 이미지의 사이즈, 해시값(SHA-256)은 이하와 같습니다. 약 667MiB.
mac$ ls -l ubuntu-20.04-preinstalled-server-arm64+raspi.img.xz
-rw-r--r--@ 1 yuya staff 699424400 May 4 18:01 ubuntu-20.04-preinstalled-server-arm64+raspi.img.xz
mac$ shasum -a 256 ubuntu-20.04-preinstalled-server-arm64+raspi.img.xz
48167067d65c5192ffe041c9cc4958cb7fcdfd74fa15e1937a47430ed7b9de99 ubuntu-20.04-preinstalled-server-arm64+raspi.img.xz
4. Ubuntu Server 이미지를 microSD 카드에 씁니다.
다운로드한 이미지를 "Raspberry Pi Imager"를 사용하여 microSD 카드에 씁니다.
Raspberry Pi Imager는 Raspberry Pi 공식 이미지 쓰기 도구로 "Raspberry Pi Downloads"에서 다운로드 할 수 있습니다.
Homebrew를 사용하는 경우 cask를 사용하여 설치할 수 있습니다.
mac$ brew cask install raspberry-pi-imager
...
==> Downloading https://downloads.raspberrypi.org/imager/imager.dmg
######################################################################## 100.0%
==> No SHA-256 checksum defined for Cask 'raspberry-pi-imager', skipping verification.
==> Installing Cask raspberry-pi-imager
==> Moving App 'Raspberry Pi Imager.app' to '/Applications/Raspberry Pi Imager.app'.
🍺 raspberry-pi-imager was successfully installed!
Raspberry Pi Imager를 시작하고 이미지 파일, 쓰기 대상 장치를 선택하고 레코딩을 수행합니다.
이 Raspberry Pi에는 Kubernetes도 도입할 예정이므로 이미지를 쓴 후 cgroup의 설정도 써 둡니다.
mac$ sed -i -e 's/$/ cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1/' /Volumes/system-boot/cmdline.txt
mac$ cat /Volumes/system-boot/cmdline.txt
net.ifnames=0 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=LABEL=writable rootfstype=ext4 elevator=deadline rootwait fixrtc cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1
5. Ubuntu Server 환경 확인
이미지를 쓴 microSD 카드를 Raspberry Pi에 넣고 부팅합니다. 처음 부팅하는 데 시간이 걸리므로 로그인 화면이 표시될 때까지 잠시 기다립니다. (Enter 키를 누르지 않으면 로그인 화면이 표시되지 않을 수 있습니다)
또한, 디폴트의 유저명은
ubuntu
, 패스워드도 마찬가지로 ubuntu
입니다.처음 로그인하면 비밀번호를 변경하라는 메시지가 표시되므로 새 비밀번호를 설정합니다.
참고로, 기동 직후의 환경을 이하에 나타냅니다.
ubuntu@ubuntu:~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
ubuntu@ubuntu:~$ uname -a
Linux ubuntu 5.4.0-1008-raspi #8-Ubuntu SMP Wed Apr 8 11:13:06 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
ubuntu@ubuntu:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 876M 0 876M 0% /dev
tmpfs 185M 3.9M 181M 3% /run
/dev/mmcblk0p2 30G 2.0G 26G 7% /
tmpfs 925M 0 925M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 925M 0 925M 0% /sys/fs/cgroup
/dev/mmcblk0p1 253M 62M 191M 25% /boot/firmware
/dev/loop0 24M 24M 0 100% /snap/snapd/7267
/dev/loop1 49M 49M 0 100% /snap/core18/1708
/dev/loop2 62M 62M 0 100% /snap/lxd/14808
/dev/loop3 49M 49M 0 100% /snap/core18/1753
tmpfs 185M 0 185M 0% /run/user/1000
/dev/loop4 62M 62M 0 100% /snap/lxd/14894
ubuntu@ubuntu:~$ cat /proc/cmdline
coherent_pool=1M 8250.nr_uarts=1 cma=64M bcm2708_fb.fbwidth=1824 bcm2708_fb.fbheight=984 bcm2708_fb.fbswap=1 smsc95xx.macaddr=DC:A6:32:0A:62:1B vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000 net.ifnames=0 dwc_otg.lpm_enable=0 console=ttyS0,115200 console=tty1 root=LABEL=writable rootfstype=ext4 elevator=deadline rootwait fixrtc cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 quiet splash
ubuntu@ubuntu:~$ cat /proc/cpuinfo | grep Model
Model : Raspberry Pi 4 Model B Rev 1.1
ubuntu@ubuntu:~$ cat /proc/meminfo | head -n 3
MemTotal: 1892576 kB
MemFree: 864424 kB
MemAvailable: 1557632 kB
6. Docker 설치
Ubuntu 표준 패키지 리포지토리에는 최신 Docker(2020년 5월 4일 현재 v19.03.8) 패키지가 포함되어 있습니다.
따라서 Docker의 Ubuntu 패키지가 아닌 Ubuntu 표준 패키지에서 Docker를 설치했습니다.
apt show docker.io
의 결과에는 이하의 기술이 포함되어 있습니다만, 적어도 ARM64 환경에서는 정상적으로 동작하고 있는 것 같습니다.Using docker.io on non-amd64 hosts is not supported at this time.
ubuntu@ubuntu:~$ sudo apt update
ubuntu@ubuntu:~$ apt show docker.io
Package: docker.io
Version: 19.03.8-0ubuntu1
Built-Using: glibc (= 2.31-0ubuntu4)
Priority: optional
Section: universe/admin
Origin: Ubuntu
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Paul Tagliamonte <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 151 MB
Depends: adduser, containerd (>= 1.2.6-0ubuntu1~), iptables, debconf (>= 0.5) | debconf-2.0, libc6 (>= 2.17), libdevmapper1.02.1 (>= 2:1.02.97), libseccomp2 (>= 2.1.0), libsystemd0 (>= 209~)
Recommends: ca-certificates, cgroupfs-mount | cgroup-lite, git, pigz, ubuntu-fan, xz-utils, apparmor
Suggests: aufs-tools, btrfs-progs, debootstrap, docker-doc, rinse, zfs-fuse | zfsutils
Breaks: docker (<< 1.5~)
Replaces: docker (<< 1.5~)
Homepage: https://www.docker.com/community-edition
Download-Size: 25.9 MB
APT-Sources: http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 Packages
Description: Linux container runtime
Docker complements kernel namespacing with a high-level API which operates at
the process level. It runs unix processes with strong guarantees of isolation
and repeatability across servers.
.
Docker is a great building block for automating distributed systems:
large-scale web deployments, database clusters, continuous deployment systems,
private PaaS, service-oriented architectures, etc.
.
This package contains the daemon and client. Using docker.io on non-amd64 hosts
is not supported at this time. Please be careful when using it on anything
besides amd64.
.
Also, note that kernel version 3.8 or above is required for proper operation of
the daemon process, and that any lower versions may have subtle and/or glaring
issues.
ubuntu@ubuntu:~$ sudo apt install --yes docker.io
ubuntu@ubuntu:~$ sudo docker version
Client:
Version: 19.03.8
API version: 1.40
Go version: go1.13.8
Git commit: afacb8b7f0
Built: Wed Mar 11 23:43:15 2020
OS/Arch: linux/arm64
Experimental: false
Server:
Engine:
Version: 19.03.8
API version: 1.40 (minimum version 1.12)
Go version: go1.13.8
Git commit: afacb8b7f0
Built: Wed Mar 11 22:48:33 2020
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.3.3-0ubuntu2
GitCommit:
runc:
Version: spec: 1.0.1-dev
GitCommit:
docker-init:
Version: 0.18.0
GitCommit:
7. hello-world 이미지 실행
Docker 설치가 완료되었으므로 동작 확인을 위해
hello-world
이미지를 실행해 봅니다.ubuntu@ubuntu:~$ sudo docker container run --tty --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
256ab8fe8778: Pull complete
Digest: sha256:8e3114318a995a1ee497790535e7b88365222a21771ae7e53687ad76563e8e76
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(arm64v8)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
성공적으로 실행할 수 있었습니다.
Ubuntu Server와 Docker 설치는 이상입니다.
Reference
이 문제에 관하여(Raspberry Pi 4에 Ubuntu 20.04 LTS 및 Docker 설치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuyakato/items/ff7b23f9cee42c937ba9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)