Raspberry Pi 4에 Ubuntu 20.04 LTS 및 Docker 설치

3행 정리


  • Ubuntu Server 20.04 LTS ARM64 버전은 Raspberry Pi 4에서도 문제없이 작동한다.
  • Ubuntu 표준 Docker 패키지도 문제없이 작동한다.
  • "Raspberry Pi Imager"는 Homebrew에서 설치할 수 있다.

  • 1. 소개



    2020년 4월 23일에 「Ubuntu 20.04 LTS」(개발 코드: Focal Fossa)가 릴리스 되었습니다.
    Kubernetes 환경을 업데이트하기 위해 Ubuntu 20.04 LTS를 Raspberry Pi 4에 설치하고 Docker를 설치했습니다.
    특히 문제에는 조우하지 않았습니다만, 일단 기록해 둡니다.

    2. 구성



    이번 구성은 다음과 같습니다.
  • 하드웨어: Raspberry Pi 4 2GB 버전
  • OS: Ubuntu Server 20.04 LTS ARM64(64비트) 버전

  • 이미지의 기입은, 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 설치는 이상입니다.

    좋은 웹페이지 즐겨찾기