БъздаванС Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Ubuntu Π·Π° ARM β€žΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°β€œ

ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Ρ‚ΠΎΠΊΡƒ-Ρ‰ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π΅, чСсто Π½Π΅ Π΅ ясно ΠΊΠΎΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Ρ‰Π΅ ΠΎΡ‚ΠΈΠ΄Π°Ρ‚ Π΄ΠΎ Ρ†Π΅Π»Π΅Π²Π°Ρ‚Π° rootfs.

Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, Ρ‚Π²ΡŠΡ€Π΄Π΅ Ρ€Π°Π½ΠΎ Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ LFS, buildroot ΠΈΠ»ΠΈ yocto (ΠΈΠ»ΠΈ Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ), Π½ΠΎ Π²Π΅Ρ‡Π΅ трябва Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅. Π—Π° Π±ΠΎΠ³Π°Ρ‚ΠΈΡ‚Π΅ (ΠΈΠΌΠ°ΠΌ 4GB eMMC Π½Π° ΠΏΠΈΠ»ΠΎΡ‚Π½ΠΈ ΠΏΡ€ΠΎΠ±ΠΈ) ΠΈΠΌΠ° ΠΈΠ·Ρ…ΠΎΠ΄ Π΄Π° разпространим Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ дистрибуция, която Ρ‰Π΅ ΠΈΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π±ΡŠΡ€Π·ΠΎ Π΄Π° доставят Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° липсва, ΠΈ Ρ‚ΠΎΠ³Π°Π²Π° Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ ΡΠΏΠΈΡΡŠΡ†ΠΈ с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΈ Π΄Π° създавамС списък Π·Π° Ρ†Π΅Π»Π΅Π²ΠΈΡ‚Π΅ rootfs.

Π’Π°Π·ΠΈ статия Π½Π΅ Π΅ Π½ΠΎΠ²Π° ΠΈ прСдставлява проста инструкция Π·Π° ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ ΠΈ поставянС.

Π¦Π΅Π»Ρ‚Π° Π½Π° статията Π΅ Π΄Π° изградя Ubuntu rootfs Π·Π° ARM ΠΏΠ»Π°Ρ‚ΠΊΠΈ (Π² моя случай, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Colibri imx7d).

Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠΌΠΈΠ΄ΠΆ

БглобявамС Ρ†Π΅Π»Π΅Π²ΠΈΡ‚Π΅ rootfs Π·Π° рСпликация.

Π Π°Π·ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π½Π° Ubuntu Base

НиС сами ΠΈΠ·Π±ΠΈΡ€Π°ΠΌΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ въз основа Π½Π° Π½ΡƒΠΆΠ΄ΠΈΡ‚Π΅ ΠΈ собствСнитС си прСдпочитания. Π’ΡƒΠΊ съм Π΄Π°Π» 20.

$ mkdir ubuntu20
$ cd ubuntu20
$ mkdir rootfs
$ wget http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04-base-armhf.tar.gz
$ tar xf ubuntu-base-20.04-base-armhf.tar.gz -C rootfs

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° BINFMT Π² ядрото

Ако ΠΈΠΌΠ°Ρ‚Π΅ ΠΎΠ±Ρ‰Π° дистрибуция, Ρ‚ΠΎΠ³Π°Π²Π° ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° BINFMT_MISC ΠΈ всичко Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΎ, Π°ΠΊΠΎ Π½Π΅, Ρ‚ΠΎΠ³Π°Π²Π° съм сигурСн, Ρ‡Π΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° BINFMT Π² ядрото.

Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ BINFMT_MISC Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ Π² ядрото:

$ zcat /proc/config.gz | grep BINFMT
CONFIG_BINFMT_ELF=y
CONFIG_COMPAT_BINFMT_ELF=y
CONFIG_BINFMT_SCRIPT=y
CONFIG_BINFMT_MISC=y

Π‘Π΅Π³Π° трябва Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ настройкитС:

$ ls /proc/sys/fs/binfmt_misc
qemu-arm  register  status
$ cat /proc/sys/fs/binfmt_misc/qemu-arm
enabled
interpreter /usr/bin/qemu-arm
flags: OC
offset 0
magic 7f454c4601010100000000000000000002002800
mask ffffffffffffff00fffffffffffffffffeffffff

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС рСгистриратС Ρ€ΡŠΡ‡Π½ΠΎ, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅Ρ‚ΠΎ Ρ‚Π΅Π·ΠΈ инструкции.

НастройванС Π½Π° статично Ρ€Π°ΠΌΠΎ Π½Π° qemu

Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ статично сглобСн СкзСмпляр Π½Π° qemu.

!!! Π’ΠΠ˜ΠœΠΠΠ˜Π•!!!
Ако ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π½Π΅Ρ‰ΠΎ, Π²ΠΈΠΆΡ‚Π΅:
https://sourceware.org/bugzilla/show_bug.cgi?id=23960
https://bugs.launchpad.net/qemu/+bug/1805913
Π’ΠΎΠ³Π°Π²Π° Π·Π° x86_64 хост ΠΈ arm guest трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ i386 вСрсията Π½Π° qemu:
http://ftp.ru.debian.org/debian/pool/main/q/qemu/qemu-user-static_5.0-13_i386.deb

$ wget http://ftp.debian.org/debian/pool/main/q/qemu/qemu-user-static_5.0-13_amd64.deb
$ alient -t qemu-user-static_5.0-13_amd64.deb
# ΠΏΡƒΡ‚ΡŒ Π² rootfs ΠΈ имя исполняСмого Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с /proc/sys/fs/binfmt_misc/qemu-arm
$ mkdir qemu
$ tar xf qemu-user-static-5.0.tgz -C qemu
$ file qemu/usr/bin/qemu-arm-static
qemu/usr/bin/qemu-arm-static: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=be45f9a321cccc5c139cc1991a4042907f9673b6, for GNU/Linux 3.2.0, stripped
$ cp qemu/usr/bin/qemu-arm-static rootfs/usr/bin/qemu-arm
$ file rootfs/usr/bin/qemu-arm
rootfs/usr/bin/qemu-arm: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=be45f9a321cccc5c139cc1991a4042907f9673b6, for GNU/Linux 3.2.0, stripped

chroot

ΠŸΡ€ΠΎΡΡ‚ скрипт:

ch-mount.sh

#!/bin/bash

function mnt() {
    echo "MOUNTING"
    sudo mount -t proc /proc proc
    sudo mount --rbind /sys sys
    sudo mount --make-rslave sys
    sudo mount --rbind /dev dev
    sudo mount --make-rslave dev
    sudo mount -o bind /dev/pts dev/pts
    sudo chroot 
}

function umnt() {
    echo "UNMOUNTING"
    sudo umount proc
    sudo umount sys
    sudo umount dev/pts
    sudo umount dev

}

if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
    mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
    umnt $1 $2
else
    echo ""
    echo "Either 1'st, 2'nd or both parameters were missing"
    echo ""
    echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
    echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
    echo ""
    echo "For example: ch-mount -m /media/sdcard/"
    echo ""
    echo 1st parameter : 
    echo 2nd parameter : 
fi

Π’ΡŠΠ·Ρ…ΠΈΡ‰Π°Π²Π°ΠΌΠ΅ сС Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°:

$ ./ch-mount.sh -m rootfs/
# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
# uname -a
Linux NShubin 5.5.9-gentoo-x86_64 #1 SMP PREEMPT Mon Mar 16 14:34:52 MSK 2020 armv7l armv7l armv7l GNU/Linux

ΠŸΡ€ΠΎΡΡ‚ΠΎ Π·Π° Π·Π°Π±Π°Π²Π»Π΅Π½ΠΈΠ΅, Π½Π΅ΠΊΠ° ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€Π΅Π΄ΠΈ ΠΈ слСд инсталиранСто Π½Π° минималния (Π·Π° ΠΌΠ΅Π½) Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ:

# du -d 0 -h / 2>/dev/null
63M     /

НСка Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅:

# apt update
# apt upgrade --yes

НСка инсталирамС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π½ΠΈ интСрСсуват:

# SYSTEMD_IGNORE_CHROOT=yes apt install --yes autoconf kmod socat ifupdown ethtool iputils-ping net-tools ssh g++ iproute2 dhcpcd5 incron ser2net udev systemd gcc minicom vim cmake make mtd-utils util-linux git strace gdb libiio-dev iiod

Π—Π°Π³Π»Π°Π²Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ Π½Π° ядрото са ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π²ΡŠΠΏΡ€ΠΎΡ. Π Π°Π·Π±ΠΈΡ€Π° сС, няма Π΄Π° инсталирамС Π±ΡƒΡƒΡ‚Π»ΠΎΡƒΠ΄ΡŠΡ€Π°, ядрото, ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅, Π΄ΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π° устройствата Ρ‡Ρ€Π΅Π· Ubuntu. Π’Π΅ Ρ‰Π΅ Π΄ΠΎΠΉΠ΄Π°Ρ‚ ΠΏΡ€ΠΈ нас ΠΎΡ‚Π²ΡŠΠ½ ΠΈΠ»ΠΈ Ρ‰Π΅ Π³ΠΈ сглобим сами ΠΈΠ»ΠΈ Ρ‰Π΅ Π½ΠΈ Π±ΡŠΠ΄Π°Ρ‚ Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ‚ производитСля Π½Π° ΠΏΠ»Π°Ρ‚ΠΊΠ°Ρ‚Π°, във всСки случай Ρ‚ΠΎΠ²Π° Π΅ извън ΠΎΠ±Ρ…Π²Π°Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ инструкция.

Π”ΠΎ извСстна стСпСн различията във вСрсиитС са ΠΏΡ€ΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΈ, Π½ΠΎ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° Π³ΠΈ Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΎΡ‚ компилацията Π½Π° ядрото.

# apt install --yes linux-headers-generic

Π”Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС случи ΠΈ сС ΠΎΠΊΠ°Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ:

# apt clean
# du -d 0 -h / 2>/dev/null
770M    /

НС забравяйтС Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»Π°.

ОпакованС Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ

$ sudo tar -C rootfs --transform "s|^./||" --numeric-owner --owner=0 --group=0 -c ./ | tar --delete ./ | gzip > rootfs.tar.gz

ОсвСн Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° инсталирамС etckeeper с настройката Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ натисканС

Π•, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅ разпространихмС Π½Π°ΡˆΠ΅Ρ‚ΠΎ сглобяванС, Π·Π°ΠΏΠΎΡ‡Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΏΠΎ Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° сглобим ΠΏΠΎ-късно Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ вСрсии Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° систСма.

etckeeper ΠΌΠΎΠΆΠ΅ Π΄Π° Π½ΠΈ сС ΠΏΡ€ΠΈΡ‚Π΅Ρ‡Π΅ Π½Π° ΠΏΠΎΠΌΠΎΡ‰.

БСзопасността Π΅ Π»ΠΈΡ‡Π΅Π½ Π²ΡŠΠΏΡ€ΠΎΡ:

  • ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅
  • Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΠΉΡ‚Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΊΠ»ΡŽΡ‡ Π·Π° всяко устройство
  • Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ натисканС
  • ΠΈ Ρ‚.Π½. ...
# ssh-keygen
# apt install etckeeper
# etckeeper init
# cd /etc
# git remote add origin ...

Π”Π° настроим Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΡ‚ΠΎ натисканС

МоТСм, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π΄Π° създадСм ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π½Π° устройството ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ (Π΄Π° Ρ€Π΅Ρ‡Π΅ΠΌ, Ρ‡Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ скрипт ΠΈΠ»ΠΈ услуга, която Ρ‰Π΅ сС изпълнява ΠΏΡ€ΠΈ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ стартиранС).

# cat /etc/etckeeper/etckeeper.conf
PUSH_REMOTE="origin"

Или ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π½Π΅Ρ‰ΠΎ ΠΏΠΎ-ΡƒΠΌΠ½ΠΎ...

ΠœΡŠΡ€Π·Π΅Π»ΠΈΠ² Π½Π°Ρ‡ΠΈΠ½

НСка ΠΈΠΌΠ°ΠΌΠ΅ някакъв ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π΄Π° Ρ€Π΅Ρ‡Π΅ΠΌ сСрийния Π½ΠΎΠΌΠ΅Ρ€ Π½Π° процСсора (ΠΈΠ»ΠΈ MAC - сСриозни ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΊΡƒΠΏΡƒΠ²Π°Ρ‚ Π³Π°ΠΌΠ°Ρ‚Π°):

cat / proc / cpuinfo

# cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 60.36
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5

processor       : 1
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 60.36
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5

Hardware        : Freescale i.MX7 Dual (Device Tree)
Revision        : 0000
Serial          : 06372509

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΠΎΠ½Π°, към ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π±ΡƒΡ‚Π½Π΅ΠΌ:

# cat /proc/cpuinfo | grep Serial | cut -d':' -f 2 | tr -d [:blank:]
06372509

НСка създадСм прост скрипт:

# cat /etc/etckeeper/commit.d/40myown-push
#!/bin/sh
set -e

if [ "$VCS" = git ] && [ -d .git ]; then
  branch=$(cat /proc/cpuinfo | grep Serial | cut -d':' -f 2 | tr -d [:blank:])
  cd /etc/
  git push origin master:${branch}
fi

И Ρ‚ΠΎΠ²Π° Π΅ всичко - слСд извСстно Π²Ρ€Π΅ΠΌΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΈ Π΄Π° създадСм списък с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° цСлСвия Ρ„ΡŠΡ€ΠΌΡƒΠ΅Ρ€.

ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ

BINFMT_MISC
ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ядрото Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈ (binfmt_misc)
ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ с потрСбитСлски chroot Π½Π° qemu
Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Ubuntu rootfs Π·Π° ARM
Как Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ пСрсонализиран Ubuntu Π½Π° ΠΆΠΈΠ²ΠΎ ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°
Crossdev qemu-static-user-chroot
etckeeper

ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с getdents64

readdir() Π²Ρ€ΡŠΡ‰Π° NULL (errno=EOVERFLOW) Π·Π° 32-Π±ΠΈΡ‚ΠΎΠ² потрСбитСлски статичСн qemu Π½Π° 64-Π±ΠΈΡ‚ΠΎΠ² хост
Ext4 64-Π±ΠΈΡ‚ΠΎΠ² Ρ…Π΅Ρˆ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π° 32-Π±ΠΈΡ‚ΠΎΠ² glibc 2.28+
compiler_id_detection сС проваля Π·Π° armhf ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° QEMU Смулация Π² потрСбитСлски Ρ€Π΅ΠΆΠΈΠΌ
CMake Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΏΠΎΠ΄ qemu-arm

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com