Odroid M1에 Arch Linux 설치

Sun Mar 31, 2024
3 minutes to read

Odroid M1을 구입한 후로 제조사 하드커널에서 제공하는 Ubuntu를 사용해왔다.
SBC를 사용하는 것이 처음이다 보니 제조사가 공식적으로 제공하는 OS를 사용하는 것이 낫겠다는 생각이었다.

하지만 apt는 특히 IO 속도가 느린 기기에서 너무 느렸다.
apt updateapt upgrade가 나뉘어 있어서 패키지 목록을 두 번씩 읽어오는데 eMMC에 설치해서 쓰던 상황이라 한숨이 나올 정도였다.

결국 다른 기기에서 평소에 쓰던 Arch Linux를 깔기로 했다.

Arch Linux ARM for Odroid M1?

한 가지 걸림돌이 있다면 Arch Linux ARM에 Odroid M1을 위한 버전이 없다는 것이다.
Odroid의 다른 모델을 위한 버전은 있지만 M1이 아직 출시된 지 얼마 되지 않았다 보니 아직 없는 것 같다.

다행히 방법이 아예 없지는 않다.

설치에 앞서

가장 큰 도움이 된 것은 오드로이드 포럼의 글이다.
요약하자면 제공되는 Ubuntu를 설치한 후에 필수 파일들을 Arch Linux로 복사해 오는 것이다.

아래 단계들이 원본 글 그대로는 아니다.
따로 파티션을 나눠 설치했으며 boot.scr을 재작성했고 필요없는 단계 몇 개는 제거했다.

설치 단계

먼저 저장 매체 두 개가 필요하다. ARCH UBNT로 칭하겠다. ARCH는 Arch Linux가 설치될 위치, UBNT는 보조용이다.
나는 ARCH에 부트, swap, 루트 파티션을 만들어 설치했다.

“옮긴다"를 수행할 때 복사든 이동이든 상관없다. Ubuntu Server도 필요하다면 복사하라.

  1. 하드 커널에서 제공하는 Ubuntu Server 이미지를 다운로드한다.
    Gnome이 번들된 버전 말고 Ubuntu Server를 다운로드하라.

  2. Arch Linux ARM의 Generic AArch64 압축 파일을 다운로드한다.

  3. 1에서 다운로드한 Ubuntu 이미지를 UBNT에 덤프한다. 나는 dd를 사용했고 따로 옵션을 주지는 않았다.

    1# dd if=ubuntu-20.04-server-odroidm1-20220531.img of=/dev/sda
    

    of에는 UBNT의 디바이스 이름을 지정하면 된다.

  4. 덤프하고 나면 UBNT에는 부트 파티션, 루트 파티션이 있어야 한다. UBNT로 부팅해 로그인까지 마친다.
    원본 글의 설명에 따르면 Ubuntu의 설치를 완료하기 위함이다.

  5. ARCH 루트 파티션에 Arch Linux ARM의 압축 파일을 풀어준다.

  6. ARCH 루트 파티션의 /boot 디렉터리 내용물을 ARCH 부트 파티션으로 옮긴다.

  7. UBNT 부트 파티션의 내용물을 ARCH 부트 파티션으로 옮긴다.

  8. UBNT 루트 파티션의 /lib/kernel, /lib/linux-image-4.19.219-odroid-arm64, /lib/modules/4.19.219-odroid-arm64, /lib/modprobe.dARCH 루트 파티션의 동일 디렉터리에 옮긴다. 필요하다면 덮어쓴다.

  9. ARCH 루트 파티션의 /etc/fstab을 수정해 준다.

    fstab 작성법을 모르겠다면 How to Write an fstab File on Linux에 설명이 있으니 참고하라.
    아래는 fstab의 예시이다.

    1# Static information about the filesystems.
    2# See fstab(5) for details.
    3
    4# <file system> <dir> <type> <options> <dump> <pass>
    5
    6UUID="3220-5800"                                /boot           vfat    defaults        0       2
    7UUID="974ff6fe-3b25-4b6d-b545-e7994d1b295f"     none            swap    defaults        0       0
    8UUID="2c476ed0-ad46-4cdc-9c64-c1a27a0ded9c"     /               ext4    defaults        0       1
    9UUID="ef5b2c6a-7eaa-44b9-b4f3-9a055921528c"     /mnt/storage    ext4    defaults        0       2
    

    <file system>에 UUID를 지정하든 디바이스 이름(/dev/nvme0n1p1 등)을 지정하든 당장은 상관없다.
    하지만 리눅스가 디바이스 이름이 바뀌지 않음을 보장하지 않는다는 점은 알아두어야 한다.
    UUID를 알아내는 방법도 위의 링크에 있다.

  10. ARCH 부트 파티션의 boot.scr을 재작성한다.

    boot.scr은 먼저 스크립트를 작성한 후 uboot-tools패키지의 mkimage 명령을 이용해 생성한다.
    위 글의 작성자가 boot.scr 생성을 위한 스크립트도 작성해 두었다.

    1setenv bootlabel (부트 라벨)
    2
    3setenv bootargs root=UUID=(UUID) rw rootwait audit=0 splash plymouth.ignore-serial-consoles console=ttyS2,1500000 earlycon=uart8250,mmio32,0xfe660000
    4
    5load ${devtype} ${devnum}:${partition} ${fdt_addr_r} ${prefix}/dtbs/rockchip/rk3568-odroid-m1.dtb
    6load ${devtype} ${devnum}:${partition} ${kernel_addr_r} ${prefix}/Image
    7load ${devtype} ${devnum}:${partition} ${ramdisk_addr_r} ${prefix}/initramfs-linux.img
    8booti ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}
    

    (부트 라벨) 위치에 부트로더 OS 선택 항목에 뜰 라벨명을 원하는 대로 지정하고 (UUID) 위치에 ARCH 루트 파티션의 UUID를 지정하면 된다.

    ARCH 부트 파티션에 위의 load 항목에 있는 파일들이 존재하는지 확인해보라.
    vmlinuz*가 없는 것에 의아할 수 있는데, Arch Linux ARM은 vmlinuz* 대신 Image라는 이름의 커널 이미지를 사용한다.

    위의 스크립트를 저장한 후에 mkimage 명령을 실행한다. 아래의 boot.txt가 내가 스크립트를 저장한 파일명이다.

    1# mkimage -T script -d boot.txt boot.scr
    

    원본 boot.scr을 백업용으로 저장해 두고 새로 생성한 것을 /boot 디렉터리에 넣어 준다.

  11. 재부팅을 두 번 한다.

  12. pacman의 keyring을 생성한다.

    1# pacman-key --init
    2# pacman-key --populate archlinuxarm
    

끝?

제대로 작동한다면 축하한다.

작동하지 않는다면 올바른 파티션의 올바른 디렉터리의 내용물을 옮긴 것이 맞는지 다시 한 번 확인해 보라.
모든 단계를 수행했는데 정상적으로 설치가 되지 않았다면 댓글이나 메일을 남겨 달라.

이 글은 Odroid 포럼 trap000d을 참고하여 작성하였다.