이미지를 플래싱하기 전에 소프트웨어를 업데이트, 업그레이드 및 설치할 수 있습니까?


28

제한된 SD 쓰기주기를 사용하여 이미지에 제공된 소프트웨어를 업그레이드하는 것은 어리석은 것 같습니다. SD 카드에 이미지를 플래싱하기 전에 소프트웨어를 업그레이드하고 새 소프트웨어를 설치할 수 있습니까?

답변:


31

대답은 항상 그렇습니다. 맞습니다. 어떻게 해결하는 데 시간이 걸립니다!

어려운 방법

Brightbox.com 에서 제공하는 VPS에서이를 실행합니다 . Nano 서버 (2 CPU, 512MB RAM, 20GB 디스크 공간)와 Ubuntu Precise 12.04 LTS 서버 이미지를 사용했습니다. EC2 또는 Linode의 동등한 기능과 가정용 Linux 시스템에서 작동해야합니다. 이제 (x86) 아치 설치에서 테스트했지만 패키지 중 일부가 너무 오래되어 Ubuntu 10.04 LTS에서 작동하지 않는다는 것을 알고 있습니다.

시스템 준비-데비안 / 우분투

자신의 시스템이 최신인지 확인하십시오.

$ sudo apt-get update
$ sudo apt-get upgrade

새로운 소프트웨어 설치

$ sudo apt-get install binfmt-support qemu qemu-user-static unzip

qemu에서 ARM 에뮬레이터이며, qemu-user-staticbinfmt-support는 ARM 커널을 모방하지 않고 ARM 실행 파일을 실행할 수있게 해준다. (얼마나 멋진가요?!)

시스템 준비-아치

qemu아치 저장소에서 정적으로 링크 된 것을 찾을 수 없으므로 소스에서 컴파일해야합니다.

  1. http://git.savannah.gnu.org/cgit/qemu.git 에서 최신 릴리스를 다운로드하십시오.
  2. 압축을 풀고 실행

    ./configure --disable-kvm --target-list=arm-linux-user --static

  3. 를 사용하여 빌드 make하고 설치 하십시오 sudo make install.

  4. 다음과 같이 실행하십시오 root

    echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-arm:' > /proc/sys/fs/binfmt_misc/register

    echo ':armeb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/local/bin/qemu-armeb:' > /proc/sys/fs/binfmt_misc/register

경고 대로하는 것은 온라인으로 찾을 임의의 명령을 실행하지 않아야 root이들은에서 찍은 - qemu-binfmt-conf.sh는 ARM CPU 종류에 따라. 이 파일에서 명령을 추출하여 실행하십시오.

이미지 다운로드 및 압축 해제

raspberrypi.org로 이동하여 원하는 이미지를 다운로드하십시오. 압축을 풀고 .img유용한 파일을 저장하십시오 .

$ sudo mkdir -p /images/debian-squeeze
$ sudo wget "http://files.velocix.com/c1410/images/debian/6/debian6-19-04-2012/debian6-19-04-2012.zip" -O "/images/debian-squeeze.zip"
$ sudo unzip "/images/debian-squeeze.zip" -d /images/debian-squeeze
$ sudo rm /images/debian-squeeze.zip

올바른 파티션을 찾으십시오

.img부팅 파티션을 포함, 3 개 개의 파티션을 포함합니다.

$ cd /images/debian-squeeze/debian6-19-04-2012/
$ fdisk -lu debian6-19-04-2012.img
Disk debian6-19-04-2012.img: 1949 MB, 1949999616 bytes
4 heads, 32 sectors/track, 29754 cylinders, total 3808593 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ee283

                 Device Boot      Start         End      Blocks   Id  System
debian6-19-04-2012.img1            2048      155647       76800    c  W95 FAT32 (LBA)
debian6-19-04-2012.img2          157696     3414015     1628160   83  Linux
debian6-19-04-2012.img3         3416064     3807231      195584   82  Linux swap / Solaris

Linux 파티션의 오프셋 (이 경우 157696섹터)과 부트 파티션 (섹터) 을 알아야합니다 2048. 각 섹터는 512 바이트이므로 루트 오프셋은 157696*512=80740352바이트이고 부팅 오프셋은 2048*512=1048576입니다.

이미지를 루프백 장치로 마운트

다음으로 이미지를 파일 시스템으로 마운트해야합니다. 루프백 장치를 사용하여 수행 할 수 있습니다. 이전 섹션의 오프셋을 사용하여 mount마운트 할 파티션과 위치 를 알려줍니다 . 이 명령의 순서는 중요합니다.

$ sudo mount -o loop,offset=80740352 "/images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img" /mnt
$ sudo mount -o loop,offset=1048576 "/images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img" /mnt/boot

파일 시스템 준비

우리는 거의 준비가 chroot우리의 파일 시스템에 새로운 소프트웨어를 설치하기 시작합니다. 먼저 에뮬레이터를 이미지에 설치해야합니다 chroot. 일단 사용하면 사용할 수 없습니다 .

데비안 / 우분투

$ sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/

아치 리눅스

$ sudo cp /usr/local/bin/qemu-arm /mnt/usr/local/bin/

모든 호스트 시스템

또한 시스템의 다른 특정 부분에 대한 액세스를 제공해야합니다.

$ sudo mount --rbind /dev     /mnt/dev
$ sudo mount -t proc none     /mnt/proc
$ sudo mount -o bind /sys     /mnt/sys

chroot

끝났습니다! chroot떨어져...

$ sudo chroot /mnt

귀하는 이제 Raspberry Pi에 있지만 서비스가 실행되고 있지 않습니다. 조심하십시오. 귀하는 루트입니다!

소프트웨어 업데이트 / 설치-데비안 이미지

소프트웨어를 업데이트하기 위해을 사용 apt-get합니다.

 # apt-get update
 # apt-get upgrade

apt-get install평소대로 소프트웨어를 설치할 수도 있습니다 .

소프트웨어 업데이트 / 설치-아치 이미지

소프트웨어를 업데이트하기 위해을 사용 pacman합니다.

 # pacman -Syu

pacman -S평소대로 소프트웨어를 설치할 수도 있습니다 .

참고 탑재 된 이미지에 대해 네이티브pacman어떻게 실행 pacman합니까? 의 지침에 따라 네이티브로 실행할 수 있습니다 . .

종료

+ chroot를 사용하여 종료하고 시스템을 마운트 해제하여 실행할 수 있습니다. 각 마운트 포인트를 별도로 마운트 해제해야합니다.CtrlDsudo umount /mnt

RPi qemu-user-static에서 /usr/bin또는 RPi qemu-arm에서 제거 /usr/local/bin하면 이미지를 플래시 할 수 있습니다.

마지막 단어

이것은 약간 길고 지루하지만 한 번 해보십시오.이 모든 것이 어떻게 작동하는지에 대해 많은 것을 배울 것입니다!

최신 이미지에 대한 참고 사항

최신 이미지에서 실행하려고하면 오류가 발생합니다

qemu: uncaught target signal 4 (Illegal instruction) - core dumped
Illegal instruction (core dumped)

이 오류를 해결하려면 /etc/ld.so.preload파일 내용을 주석 처리 하십시오.

쉬운 길- piimg

나는 당신을 위해이 일을 많이하는 유틸리티 작업을 시작했습니다. 그것은이라고 piimg 과에서 찾을 수 있습니다 github.com/alexchamberlain/piimg .

지금까지는 SD 카드를 마운트하여 실행할 수 있습니다.

piimg mount /images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img /mnt

실행하여 다시 마운트 해제

piimg umount /mnt

당신은 설치 qemu하고 chroot멀리 해야합니다 .

면책 조항 I, Alex Chamberlain은의 수석 개발자입니다 piimg. 이와 같이, 나는 piimg다른 방법들과 관련 하여 사용하도록 편향 될 수있다 .

참고 문헌

  1. 데스크탑 PC에서 ARM Linux 실행 : 외부 chroot 방식

  2. chroot하려고 할 때 '불법적 인 지시'받기


그래서 실제로 이것을 테스트 한 사람이 있습니까?
finnw

@finnw Jivings가 이것을 테스트했다고 생각합니다.
Alex Chamberlain

1
sudo kpartx -av rpi_pisces_mate_r1.img파티션을 표시하는을 사용할 수도 있습니다 . 가장 큰 것을 사용하여 마운트하십시오 (예 :) sudo mount /dev/mapper/loop0p3 /mnt/tmp.
elmicha

@AlexChamberlain : 실제로 Brightbox 서버 에서이 작업을 수행 했습니까? 필자는 가정용 PC에서 이것을 성공적으로 테스트했지만 Brightbox에서 시도했을 때 chroot 할 수 없었으며 가상화를 효과적으로 가상화하기 위해 노력하고 있었기 때문에 원했습니다. 물론 뭔가 잘못했을 수도 있지만 완전히 포기하기 전에 쿼리 할 가치가 있다고 생각했습니다! 훌륭한 튜토리얼에 감사드립니다.
DrAl

Noobs Distro를 chroot하는 방법을 포함하도록 이것을 업데이트 할 수 있습니까? 그러한 배포판에
뿌리를 내리는

0

롤링 할 때 함께 작성한 빠른 스크립트는 이미지 파일의 첫 번째 Linux 파티션을 사용합니다. 오류 처리 / 입력 유효성 검사가 없습니다.

#!/bin/bash

# This script is designed to mount
# the first Linux filesystem
# in the partition table of the
# image handed to it

USAGE="$0 <image name> <mount point>"
IMAGE=$1
MOUNTPT=$2

OFFSET=`fdisk -lu $IMAGE | grep -m 1 Linux$ | awk '{ print $2 *512 }'`

echo "Executing as $USER: mount -o loop,offset=$OFFSET $IMAGE $MOUNTPT"
mount -o loop,offset=$OFFSET $IMAGE $MOUNTPT

불행히도 이미지는 모두 ARM 기반이므로 실제로 직접 이미지를 실행할 수는 없습니다. 업데이트하는 것은 조금 까다 롭습니다 ... 호스트 시스템이 적절한 경우에는 가능할 수 있습니다.
Fred

-2

필자는 기본 PC를 통해 PI를 위해 물건을 만드는 방법을 찾는 지침을 따랐습니다. 매우 쉬웠다는 것이 밝혀졌습니다. 일단 루트가되면 이미지를 마치 실제 시스템처럼 취급하고 모든 이미지를 사용할 수 있습니다. 기본 앱. 파이에서 크로스 컴파일러를 설치할 필요가 없습니다. :)

chroot를 설정하는 동안 chroot가 제대로 작동하려면 몇 가지 파티션을 마운트해야합니다.

$ sudo mount --rbind /dev     /mnt/dev
$ sudo mount -t proc none     /mnt/proc
$ sudo mount -o bind /sys     /mnt/sys

올바르게 마운트 해제하려면 어떻게해야합니까? 마운트 된 상태로두면 .img 파일을 마운트 해제하지 못하게되므로 여기서 도움이 될 것입니다. 마운트 된 다른 기본 항목이 있는지 확실하지 않은 -f 옵션을 시도했습니다.

내 자신의 질문에 대답 https://bugzilla.redhat.com/show_bug.cgi?id=194342 게시물 끝에 두 번째 방법은 sudo 수정으로 나를 위해 일했습니다.

cat /proc/mounts | awk '{print $2}' | grep "^$MOUNTPOINT" | sort -r | xargs sudo umount

$ MOUNTPOINT를 chroot 마운트 포인트 (이미지 파일에 rootfs를 포함하는 두 번째 파티션 (위의 튜토리얼에서 / mnt)의 경로)로 변경하십시오. 이 방법을 사용하면 루프백 장치 및 chroot를 통해 마운트 된 다른 장치에서 img 파일을 완전히 마운트 해제 할 수 있습니다.

cat /proc/mounts |awk '{print $2}'|grep $CHROOTMOUNT |sort -r|xargs sudo umount
sudo umount $CHROOTMOUNT

이것이 실제로 질문에 대한 대답인지 확실하지 않습니다. 이미지에 뿌리를 내리는 방법이나 이미지에 소프트웨어를 설치하는 방법에 대해서는 설명하지 않습니다. 또한 이것은 새로운 질문을 할 수있는 곳이 아닙니다.
Jivings

OP가 자신의 질문에 대해 작성한 원래 예 답변과 동일한 방법을 사용하고 있습니다. 이미지를 마운트 해제하는 데 문제가 있었으므로이 질문에 대한 최상의 장소이며 최종 답변입니다.
Reggie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.