Parece tolice usar nossos ciclos limitados de gravação em SD para atualizar o software enviado nas imagens. Podemos atualizar o software e instalar um novo antes de enviar uma imagem para o cartão SD?
Parece tolice usar nossos ciclos limitados de gravação em SD para atualizar o software enviado nas imagens. Podemos atualizar o software e instalar um novo antes de enviar uma imagem para o cartão SD?
Respostas:
A resposta é sempre sim, certo, leva apenas um tempo para descobrir como!
Eu executarei isso em um VPS, fornecido pela Brightbox.com . Usei um Nano Server (2 CPUs, 512 MB de RAM, 20 GB de espaço em disco) e uma imagem do servidor Ubuntu Precise 12.04 LTS. Ele deve funcionar com os equivalentes do EC2 ou do Linode e, é claro, na sua máquina Linux doméstica. Agora eu testei na minha instalação do Arch (x86), mas sei que não funciona no Ubuntu 10.04 LTS porque alguns dos pacotes são muito antigos.
Verifique se seu próprio sistema está atualizado.
$ sudo apt-get update
$ sudo apt-get upgrade
Instale um novo software
$ sudo apt-get install binfmt-support qemu qemu-user-static unzip
qemué um emulador de ARM qemu-user-statice binfmt-supportpermite executar executáveis do ARM sem emular o kernel do ARM. (Quão legal é isso!?!)
Não consigo encontrar um link estaticamente qemunos repositórios do Arch, então teremos que compilar a partir do código-fonte.
Descompacte e execute
./configure --disable-kvm --target-list=arm-linux-user --static
Crie usando makee instale usando sudo make install.
Execute o seguinte como 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
Aviso Você não deve executar comandos arbitrários encontrados on-line, pois
rootforam retirados doqemu-binfmt-conf.shtipo de CPU do ARM. Por favor, extraia os comandos deste arquivo e execute-os.
Vá para raspberrypi.org e faça o download da imagem desejada. Descompacte e salve o .imgarquivo em algum lugar útil.
$ 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
O .imgarquivo conterá 3 partições, incluindo a partição de inicialização.
$ 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
Precisamos conhecer o deslocamento da partição Linux, neste caso, são os 157696setores e a partição de inicialização, que está nos 2048setores. Cada setor tem 512 bytes, portanto, o deslocamento raiz é 157696*512=80740352bytes e o deslocamento de inicialização é 2048*512=1048576.
Em seguida, precisamos montar a imagem como um sistema de arquivos. Isso pode ser feito usando um dispositivo de loopback. Usamos o deslocamento da seção anterior para dizer mountquais partições montar e onde. A ordem desses comandos é importante.
$ 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
Estamos quase prontos para chrootentrar no nosso sistema de arquivos e começar a instalar um novo software. Primeiro, precisamos instalar o emulador em nossa imagem, pois ele não estará disponível quando usarmos chroot.
$ sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/
$ sudo cp /usr/local/bin/qemu-arm /mnt/usr/local/bin/
Também precisamos fornecer acesso a outras partes do sistema.
$ sudo mount --rbind /dev /mnt/dev
$ sudo mount -t proc none /mnt/proc
$ sudo mount -o bind /sys /mnt/sys
Acabamos! chrootlonge...
$ sudo chroot /mnt
Agora você está no seu Raspberry Pi, mas os serviços não estão sendo executados etc. Tenha cuidado, você é root!
Para atualizar o software, usamos apt-get.
# apt-get update
# apt-get upgrade
Você também pode instalar o software usando apt-get installcomo de costume.
Para atualizar o software, usamos pacman.
# pacman -Syu
Você também pode instalar o software usando pacman -Scomo de costume.
NOTA Você pode executar
pacmannativamente seguindo as instruções em Como executo meu nativopacmanem uma imagem montada? .
Você pode sair do chrootusando Ctrl+ De desmontar o sistema executando sudo umount /mnt- você precisará desmontar cada ponto de montagem separadamente.
Você deve remover qemu-user-staticde /usr/binou qemu-armdo /usr/local/binRPi, para que a imagem esteja pronta para flash.
Isso é um pouco longo e tedioso, mas faça-o uma vez e você aprenderá muito sobre como tudo isso funciona!
Ao tentar executar isso nas imagens mais recentes, você receberá um erro
qemu: uncaught target signal 4 (Illegal instruction) - core dumped
Illegal instruction (core dumped)
Para corrigir esse erro, basta comentar o conteúdo do /etc/ld.so.preloadarquivo
piimgComecei a trabalhar em um utilitário para fazer muito disso por você. É chamado piimg e pode ser encontrado em github.com/alexchamberlain/piimg .
Até agora, ele pode montar o cartão SD para você executando
piimg mount /images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img /mnt
e desmonte-os novamente executando
piimg umount /mnt
Você só precisa instalar qemue ir chrootembora.
AVISO LEGAL Eu, Alex Chamberlain, sou o principal desenvolvedor do
piimg. Como tal, posso estar inclinado para o uso depiimgem relação a outros métodos.
sudo kpartx -av rpi_pisces_mate_r1.img, which will show the partitions. Use the biggest one and mount it, e.g. sudo mount /dev/mapper/loop0p3 /mnt/tmp.
Aqui, um script rápido que montei enquanto o rodava monta a primeira partição Linux de um arquivo de imagem. Use por sua conta e risco. Não possui manipulação de erro / validação de entrada
#!/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
Eu segui as instruções procurando por um método para criar apenas coisas para o PI através do meu PC principal. Acontece que foi muito fácil, uma vez que você esteja chrootado, poderá tratar a imagem como se fosse um sistema ativo e usar todos os recursos. aplicativos nativos. no pi, então não há necessidade de instalar um compilador cruzado :)
Eu tenho uma pergunta, porém, durante a configuração do chroot, precisamos montar algumas partições para que o chroot funcione corretamente:
$ sudo mount --rbind /dev /mnt/dev
$ sudo mount -t proc none /mnt/proc
$ sudo mount -o bind /sys /mnt/sys
Como os desmontamos corretamente? deixando-os montados, o que impede você de desmontar o arquivo .img, qualquer ajuda aqui será apreciada. Eu tentei a opção -f, não tenho certeza se há algo mais subjacente que está montado.
respondendo minha própria pergunta, https://bugzilla.redhat.com/show_bug.cgi?id=194342 o segundo método no final do post funcionou para mim com uma modificação do sudo.
cat /proc/mounts | awk '{print $2}' | grep "^$MOUNTPOINT" | sort -r | xargs sudo umount
Obviamente, mude $ MOUNTPOINT para o caminho do seu ponto de montagem chroot (segunda partição que contém os rootfs no arquivo de imagem, que é / mnt no tutorial acima). Usando esse método, você desmonta completamente o arquivo img dos dispositivos de auto-retorno e de quaisquer outros dispositivos que foram montados através do chroot.
cat /proc/mounts |awk '{print $2}'|grep $CHROOTMOUNT |sort -r|xargs sudo umount
sudo umount $CHROOTMOUNT