Có thể cập nhật, nâng cấp và cài đặt phần mềm trước khi flash hình ảnh không?


28

Có vẻ ngớ ngẩn khi sử dụng chu kỳ ghi SD giới hạn của chúng tôi để nâng cấp phần mềm được cung cấp trên hình ảnh. Chúng ta có thể nâng cấp phần mềm và cài đặt phần mềm mới trước khi flash hình ảnh vào thẻ SD không?

Câu trả lời:


31

Vâng

Câu trả lời luôn luôn là có, đúng, chỉ mất một lúc để tìm ra cách!

Con đường gian nan

Tôi sẽ chạy cái này trên VPS, được cung cấp bởi Brightbox.com . Tôi đã sử dụng Máy chủ Nano (2 CPU, RAM 512 MB, dung lượng ổ đĩa 20 GB) và hình ảnh máy chủ Ubuntu Precise 12.04 LTS. Nó nên hoạt động trên các tương đương của EC2 hoặc Linode, và tất nhiên, trên máy Linux tại nhà của bạn. Bây giờ tôi đã thử nghiệm nó trên bản cài đặt Arch (x86) của mình, nhưng biết rằng nó không hoạt động trên Ubuntu 10.04 LTS vì một số gói quá cũ.

Chuẩn bị hệ thống của bạn - Debian / Ubuntu

Đảm bảo hệ thống của riêng bạn được cập nhật.

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

Cài đặt một số phần mềm mới

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

qemulà một trình giả lập ARM qemu-user-staticbinfmt-supportcho phép chúng tôi chạy các tệp thực thi ARM mà không cần mô phỏng nhân ARM. (Thật tuyệt làm sao!?!)

Chuẩn bị hệ thống của bạn - Arch

Tôi không thể tìm thấy một liên kết tĩnh qemutrong kho Arch, vì vậy chúng tôi sẽ phải biên dịch từ nguồn.

  1. Tải xuống bản phát hành mới nhất từ http://git.savannah.gnu.org/cgit/qemu.git
  2. Giải nén và chạy

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

  3. Xây dựng bằng cách sử dụng makevà cài đặt bằng cách sử dụng sudo make install.

  4. Chạy như sau 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

Cảnh báo Bạn không nên chạy các lệnh tùy ý mà bạn tìm thấy trực tuyến root- những lệnh này được lấy từ qemu-binfmt-conf.shloại cpu ARM. Vui lòng trích xuất các lệnh từ tệp này và chạy chúng.

Tải xuống và giải nén hình ảnh

Tới raspberrypi.org và tải hình ảnh mà bạn muốn. Giải nén nó và lưu .imgtập tin ở đâu đó hữu ích.

$ 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

Tìm phân vùng chính xác

Các .imgsẽ chứa 3 phân vùng, bao gồm các phân vùng khởi động.

$ 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

Chúng ta cần biết phần bù của phân vùng Linux, trong trường hợp này là các 157696sector và phân vùng khởi động, nằm ở các 2048sector. Mỗi sector là 512 byte, do đó phần bù gốc là 157696*512=80740352byte và phần bù khởi động là 2048*512=1048576.

Gắn hình ảnh như một thiết bị loopback

Tiếp theo, chúng ta cần gắn hình ảnh như một hệ thống tập tin. Điều này có thể được thực hiện bằng cách sử dụng một thiết bị loopback. Chúng tôi sử dụng phần bù từ phần trước để cho biết mountphân vùng nào sẽ được gắn và vị trí. Thứ tự của các lệnh này là quan trọng.

$ 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

Chuẩn bị hệ thống tập tin.

Chúng tôi gần như đã sẵn sàng để chrootvào hệ thống tệp của chúng tôi và bắt đầu cài đặt phần mềm mới. Đầu tiên, chúng ta phải cài đặt trình giả lập vào hình ảnh của mình, vì nó sẽ không khả dụng khi chúng ta sử dụng chroot.

Debian / Ubuntu

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

Arch Linux

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

Tất cả các hệ thống máy chủ

Chúng tôi cũng cần cung cấp quyền truy cập vào một số phần khác của hệ thống.

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

chroot

Chúng ta xong rồi! chrootxa...

$ sudo chroot /mnt

Bây giờ bạn đang ở trong Raspberry Pi, nhưng các dịch vụ không chạy, v.v. Hãy cẩn thận, bạn đã root!

Cập nhật / Cài đặt phần mềm - Hình ảnh Debian

Để cập nhật phần mềm, chúng tôi sử dụng apt-get.

 # apt-get update
 # apt-get upgrade

Bạn cũng có thể cài đặt phần mềm bằng cách sử dụng apt-get installnhư bình thường.

Cập nhật / Cài đặt phần mềm - Arch Image

Để cập nhật phần mềm, chúng tôi sử dụng pacman.

 # pacman -Syu

Bạn cũng có thể cài đặt phần mềm bằng cách sử dụng pacman -Snhư bình thường.

LƯU Ý Bạn có thể chạy pacmantự nhiên bằng cách làm theo các hướng dẫn về Làm cách nào để chạy bản địa của tôi pacmandựa trên hình ảnh được gắn? .

Thoát

Bạn có thể thoát khỏi chrootbằng cách sử dụng Ctrl+ Dvà ngắt kết nối hệ thống bằng cách chạy sudo umount /mnt- bạn sẽ phải ngắt kết nối từng điểm gắn kết riêng biệt ..

Bạn nên xóa qemu-user-statickhỏi /usr/binhoặc qemu-armtừ /usr/local/bintrên RPi, sau đó hình ảnh đã sẵn sàng để được flash.

Từ cuối cùng

Điều này hơi dài và tẻ nhạt, nhưng hãy thực hiện một lần và bạn sẽ học được rất nhiều về cách thức hoạt động của tất cả!

Lưu ý về hình ảnh mới nhất

Khi cố gắng chạy làm điều này trên các hình ảnh mới nhất, bạn sẽ gặp lỗi

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

Để khắc phục lỗi này, chỉ cần nhận xét nội dung của /etc/ld.so.preloadtệp

Cách dễ dàng - piimg

Tôi đã bắt đầu làm việc trên một tiện ích để làm rất nhiều thứ này cho bạn. Nó được gọi là piimg và có thể được tìm thấy tại github.com/alexchamberlain/piimg .

Cho đến nay, nó có thể gắn thẻ SD cho bạn bằng cách chạy

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

và ngắt kết nối chúng một lần nữa bằng cách chạy

piimg umount /mnt

Bạn chỉ cần cài đặt qemuchrootđi.

TUYÊN BỐ TỪ CHỐI I, Alex Chamberlain, là nhà phát triển chính của piimg. Như vậy, tôi có thể thiên vị đối với việc sử dụng piimgliên quan đến các phương pháp khác.

Tài liệu tham khảo

  1. Chạy ARM Linux trên máy tính để bàn của bạn: Cách chroot nước ngoài

  2. Nhận 'hướng dẫn bất hợp pháp' khi cố gắng chroot


Vì vậy, có ai thực sự đã thử nghiệm điều này?
Finnw

@finnw Tôi nghĩ rằng bây giờ Jivings đã thử nghiệm điều này.
Alex Chamberlain

1
Bạn cũng có thể sử dụng sudo kpartx -av rpi_pisces_mate_r1.img, sẽ hiển thị các phân vùng. Sử dụng cái lớn nhất và gắn kết nó, ví dụ sudo mount /dev/mapper/loop0p3 /mnt/tmp.
elmicha

@AlexChamberlain: bạn đã thực sự làm việc này trên máy chủ Brightbox chưa? Tôi đã thử nghiệm thành công điều này trên PC tại nhà nhưng khi tôi thử nó trên Brightbox tôi không thể chroot và tôi muốn nếu đó là vì cố gắng thực hiện ảo hóa trên đỉnh ảo hóa. Tất nhiên tôi cũng có thể đã làm điều gì đó sai, nhưng tôi nghĩ rằng nó đáng để truy vấn trước khi từ bỏ hoàn toàn! Cảm ơn cho một hướng dẫn tuyệt vời.
DrAl

Có thể cập nhật thông tin này để bao gồm cách chroot Noobs Distro không? Chỉ vì muốn học cách chroot vào một bản phân phối như vậy
Suhaib

0

Đây là một đoạn script nhanh mà tôi ghép lại khi tôi cuộn nó gắn phân vùng Linux đầu tiên của một tệp hình ảnh Sử dụng có nguy cơ của riêng bạn. Nó không có xử lý lỗi / xác nhận đầu vào

#!/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

Thật không may vì các hình ảnh đều dựa trên ARM, bạn thực sự không thể thực hiện bất cứ điều gì trực tiếp trên chúng. Việc cập nhật chúng là một mẹo nhỏ hơn ... Có thể là có thể nếu hệ thống máy chủ của bạn dựa trên apt.
Fred

-2

Tôi đã làm theo các hướng dẫn tìm kiếm một phương pháp để xây dựng công cụ cho PI thông qua PC chính của mình, hóa ra nó rất dễ dàng, một khi bạn bị chê bạn có thể coi hình ảnh như thể nó là một hệ thống sống và sử dụng tất cả ứng dụng gốc. trên teh pi, vì vậy không cần phải cài đặt trình biên dịch chéo :)

Tôi có một câu hỏi mặc dù, trong quá trình thiết lập chroot, chúng ta phải gắn một số phân vùng để chroot hoạt động chính xác:

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

Làm thế nào để chúng ta tháo gỡ những điều này đúng? để chúng được gắn kết, khiến bạn không thể ngắt tập tin .img, bất kỳ trợ giúp nào ở đây sẽ được đánh giá cao. Tôi đã thử tùy chọn -f, không chắc có cái gì khác bên dưới được gắn kết không.

trả lời câu hỏi của riêng tôi, https://ormszilla.redhat.com/show_orms.cgi?id=194342 phương pháp thứ 2 ở cuối bài làm việc với tôi với một sửa đổi sudo.

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

Rõ ràng thay đổi $ MOUNTPOINT thành đường dẫn của điểm gắn kết chroot của bạn (phân vùng thứ 2 chứa rootfs trên tệp hình ảnh, đó là / mnt trong hướng dẫn ở trên). Sử dụng phương pháp này, bạn hoàn toàn ngắt kết nối tệp img khỏi các thiết bị loopback và bất kỳ thiết bị nào khác được gắn thông qua chroot.

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

Tôi không chắc điều này thực sự trả lời câu hỏi. Bạn không mô tả cách bạn chroot vào hình ảnh, hoặc cách bạn cài đặt phần mềm vào nó. Ngoài ra đây không phải là nơi để đặt câu hỏi mới.
Jivings

Tôi đang sử dụng cùng một phương pháp như câu trả lời ban đầu có mà OP đưa ra cho câu hỏi của anh ấy. Khi tôi gặp vấn đề về việc khắc phục hình ảnh, đây thực sự là nơi tốt nhất cho câu hỏi đó và câu trả lời cuối cùng của riêng tôi.
Reggie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.