본문 바로가기

라즈베리파이 5

Raspberry Pi OS의 Cloud-init

반응형

 

Debian Trixie 기반 최신 Raspberry Pi OS 릴리스에 이제 cloud-init이 포함됩니다. ☁️

 

Cloud-init은 Raspberry Pi OS에 통합된 표준 기반 프로비저닝 워크플로를 제공합니다. 하나의 기기를 가동하든 전체 기기를 이미징하든, 이제 Pi가 부팅되기 전에 사용자, SSH 키, 패키지, 로캘, 인터페이스, 스토리지 등 모든 것을 미리 정의할 수 있습니다. 

 

 

 

이미 알고 계신 분들도 계시겠지만, 데비안 트릭시 기반 최신 라즈베리파이 OS 릴리스에는 이제 cloud-init이 포함됩니다 . 이는 firstrun.sh 스크립트 기반의 기존 최초 부팅 사용자 지정 시스템에서 벗어나는 전환의 시작을 의미합니다.

 

Cloud-init은 최초 부팅 시 시스템을 자동으로 구성하는 데 사용되는 크로스 플랫폼, 배포판 독립적인 도구입니다. ( 정의는 공식 cloud-init 문서에서 발췌했습니다. ) 이 도구를 사용하면 이미지를 플래싱한 후 수동으로 로그인하지 않고도 Raspberry Pi 이미지에 사용자, 네트워크 설정, SSH 키, 스토리지 구성 등을 프로비저닝할 수 있습니다.

 

어떻게 사용할 수 있나요?

 

최신 이미지(2025년 10월 20일 출시)를 다운로드했다면 부트 파티션에 세 개의 새로운 파일이 생성된 것을 확인할 수 있습니다. 이 파티션은 새로 플래시된 Raspberry Pi OS microSD 카드를 삽입하면 컴퓨터가 자동으로 마운트하는 FAT32 파티션입니다. 이미 다음 config.txt 같은 익숙한 파일들이 포함되어 있지만, 이제 다음과 같은 파일도 표시됩니다.

 

meta-data

network-config

user-data

 

대부분의 사용자에게는 meta-data이 설정은 그대로 둘 수 있습니다. cloud-init이 다른 구성 파일을 올바르게 처리할 수 있도록 하는 기능입니다. 고급 사용자는 더 복잡한 프로비저닝 워크플로에 이 설정을 사용할 수 있지만, 일반적인 설정에서는 무시해도 됩니다.

 

Cloud-init은 구성 파일에 YAML을 사용합니다. YAML을 처음 사용하는 경우 들여쓰기와 서식이 중요하므로 공식 문서를 잠깐 살펴보는 것이 좋습니다 . 지금은 가장 중요한 두 파일인 .xml user-data과 .xml 에 집중하겠습니다 network-config.

 

일반 구성 (user-data)

 

이 user-data파일은 구성의 중심이 되는 곳입니다. 네트워킹을 제외하고, cloud-init이 처음 부팅할 때 설정하는 거의 모든 것이 여기에서 제어됩니다.

 

이를 사용하면 기본 사용자를 만들고, 로캘을 정의하고, 추가 패키지를 설치하고, SSH 액세스를 구성하는 등 다양한 작업을 수행할 수 있습니다. 자세한 내용은 모두 공식 cloud-init 문서 에서 확인할 수 있습니다 .

 

다른 많은 배포판과 달리, Raspberry Pi OS에는 클라우드 초기화 구성을 위한 몇 가지 Raspberry Pi 전용 확장 기능이 포함되어 있습니다. 이를 통해 I2C, SPI, 직렬, 1-Wire와 같은 하드웨어 인터페이스를 활성화하고 USB 가젯 모드( rpi-usb-gadget)를 자동으로 활성화할 수도 있습니다.

 

다음은 사용자를 설정하고 현재 지원되는 모든 Raspberry Pi 관련 옵션을 보여주는 구성 예시입니다.

 

#cloud-config

# Set the hostname for this device. This will also update /etc/hosts if manage_etc_hosts is enabled.
hostname: mypi2025
manage_etc_hosts: true

# Set the system timezone
timezone: Europe/London

# Create a default user account and apply permissions
users:
  - name: pi
    groups: users,adm,dialout,audio,netdev,video,plugdev,cdrom,games,input,gpio,spi,i2c,render,sudo
    shell: /bin/bash
    lock_passwd: false  # Set to true to disable password login entirely
    plain_text_password: mysecretpassword123  # Alternatively, use 'passwd:' with a hashed password for better security
    ssh_authorized_keys:
      - ssh-ed25519 mykeystuff  # Replace with your actual SSH public key
    sudo: ALL=(ALL) NOPASSWD:ALL  # Allow passwordless sudo for this user

# Raspberry Pi–specific options (provided by the cc_raspberry_pi module)
rpi:
    spi: true               # Enable SPI interface
    i2c: true               # Enable I2C interface
    serial: true            # Enable serial console and UART interface
    onewire: true           # Enable 1-Wire interface
    enable_usb_gadget: true # Enable USB gadget mode

# Additional Raspberry Pi OS option (not available on generic cloud-init images)
enable_ssh: true  # Enables the SSH server on first boot

# Optional: Disable SSH password authentication if using SSH keys only (recommended for security)
# ssh_pwauth: false

 

자세한 내용은 공식 cloud-init 문서 cc_raspberry_pi 에서 해당 모듈을 참조하세요 .

 

참고: #cloud-config  파일 맨 위의 헤더는 필수입니다. 이 헤더 가 없으면 cloud-init이 파일을 올바르게 처리하지 않습니다.

 

네트워킹 구성( network-config)

 

이 network-config파일은 Raspberry Pi가 처음 부팅될 때 네트워크 인터페이스를 설정하는 방법을 정의합니다. 이름에서 알 수 있듯이, 이 파일에서 기기의 전원을 켜기 전에 Wi-Fi 또는 이더넷 설정을 구성합니다.

 

다음은 Raspberry Pi를 Wi-Fi 네트워크에 연결하는 간단한 예입니다.

 

network:
  version: 2
  wifis:
    # Make sure the target is NetworkManager which is the default on Raspberry Pi OS
    renderer: NetworkManager
    # The connection name
    wlan0:
      dhcp4: true
      # !VERY IMPORTANT! Change this to the ISO/IEC 3166 country code for the country you want to use this microSD card in.
      regulatory-domain: "GB"
      access-points:
        "My Net-Work":
          password: "mysupersecretpassword"
      # Don’t wait at boot for this connection to connect successfully
      optional: true

 

이 microSD 카드를 삽입한 상태에서 Raspberry Pi의 전원을 켜면 cloud-init이 이 구성을 처리하고 지정된 네트워크에 자동으로 연결을 시도합니다. 이를 통해 화면이나 키보드를 연결하지 않고도 SSH에 접속하거나 작업을 계속할 수 있습니다.

 

기본 Wi-Fi 자격 증명 외에도 여러 네트워크, 우선순위 폴백, 고정 IP 할당, VLAN 등 다양한 설정을 구성할 수 있습니다. 자세한 내용은 공식 cloud-init 네트워킹 설명서를 참조하세요 .

 

cloud-init이 도입되면서 Raspberry Pi OS에는 여러 최신 Linux 배포판에서 사용되는 네트워크 구성을 위한 통합 추상화 계층인 Netplan도 ​​포함되었습니다.

 

Netplan에 대해 자세히 알아보기

 

Netplan은 이제 Raspberry Pi OS에서 네트워킹의 주요 정보 소스입니다. 자체 YAML 기반 구성 형식을 사용하며, 선택한 렌더러에 따라 systemd-networkd와 NetworkManager 모두에 대한 네트워크 설정을 렌더링할 수 있습니다. 이 접근 방식의 가장 큰 장점은 이식성입니다. Netplan 구성은 NetworkManager를 사용하든 networkd를 사용하든 관계없이 이를 지원하는 모든 Linux 배포판에서 재사용할 수 있습니다.

 

Netplan을 직접 사용하려면 구성 파일을 /etc/netplan/여기에 저장하세요. cloud-init은 생성된 네트워크 구성을 수정 없이 저장하는 곳이기도 합니다 network-config. 여기에서 다음을 사용하여 활성 구성을 생성할 수 있습니다.

 

sudo netplan generate

 

이렇게 하면 선택한 백엔드(Raspberry Pi OS의 NetworkManager)에 적합한 구성 파일이 작성됩니다. 구성을 활성화하려면 다음을 실행하세요.

 

sudo netplan apply

 

연결을 검사하거나 관리하는 데는 평소처럼 사용할 수 있습니다 nmcli. 기존 도구와 스크립트 중 상당수가 nmcli 또는 NetworkManager D-Bus API를 사용하기 때문에 Netplan과 NetworkManager 사이에 통신 계층이 필요합니다. Canonical은 이러한 양방향 상호 운용성을 지원하는 세 가지 패치를 제공하며, 이를 통해 NetworkManager가 구성 변경 사항을 Netplan에 다시 알릴 수 있습니다.

 

Raspberry Pi OS의 경우, 우리는 한 걸음 더 나아가 이 워크플로를 개선하기 위한 추가 패치를 도입했습니다.

 

  • NetworkManager는 netplan- 접두사를 사용하는 연결만 처리합니다. 새 연결을 Netplan에 영구 저장하려면 생성 시 해당 접두사를 부여하면 Netplan 구성에 저장됩니다.
  • 프로필 생성 시 NetworkManager는 Netplan으로 정의된 모든 연결을 로드하고 해석된 런타임 구성을 Netplan이 이해할 수 있는 형식으로 다시 기록합니다.
  • 이 과정에서 /etc/netplan/ 아래의 모든 .yaml 및 .yml 파일은 다중 계층 간 정의 충돌을 방지하기 위해 삭제됩니다.
  • 이는 /etc/NetworkManager/system-connections/에 저장된 수동 생성 연결에는 영향을 미치지 않습니다.
    Netplan이 런타임에 생성한 모든 프로필은 /run/NetworkManager/system-connections/ 아래에 나타나며 netplan- 접두사를 사용합니다.

 

이러한 접근 방식은 두 시스템 간의 일관성을 보장하고 NetworkManager 도구를 통해 프로필을 편집하거나 다시 로드할 때 구성 편차를 방지합니다.

 

마무리하기

 

cloud-init과 Netplan이 Raspberry Pi OS에 통합되면서, 최초 부팅 프로비저닝이 훨씬 더 강력하고, 반복 가능하며, 다양한 설정에서 이식성이 향상되었습니다. 단일 기기를 구성하든, 강의실, 실험실 또는 IoT 구축을 위해 수십 대의 Raspberry Pi를 준비하든, 이러한 새로운 도구를 사용하면 시스템 전원이 켜지기 전에 사용자, 네트워킹, 인터페이스 등 모든 것을 미리 쉽게 정의할 수 있습니다.

 

Raspberry Pi Imager 2.0 출시와 함께 Raspberry Pi OS용 cloud-init 구성이 기본적으로 생성됩니다. 따라서 이미지 작성 후 부트 파티션에서 생성된 파일 user-data이나 network-config파일을 편집하기만 하면 설정을 더욱 쉽게 사용자 지정할 수 있습니다. Imager 2.0은 Raspberry Pi 관련 rpi: 옵션도 인식하므로 SPI 또는 I2C와 같은 기능을 사용자 지정 UI에서 직접 활성화할 수 있습니다.

 

기존 방식도 여전히 작동하지만, cloud-init과 Netplan은 훨씬 더 유연하고 현대적인 워크플로우를 제공합니다. 향후 릴리스에서는 Raspberry Pi 전용 cloud-init 모듈과 간소화된 프로비저닝 기능에 대한 지원을 계속 확대할 예정입니다.

 

흥미로운 템플릿을 만들 user-data거나 새로운 시스템에 대한 피드백이 있으시면 포럼network-config 에서 여러분의 의견을 들려주시기 바랍니다 .

 

cloud-init 문서 링크

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩