ARM рдХреЛ рд▓рд╛рдЧрд┐ "рд╕реНрдХреНрд░реНрдпрд╛рдЪрдмрд╛рдЯ" Ubuntu рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ

рдЬрдм рд╡рд┐рдХрд╛рд╕ рднрд░реНрдЦрд░реИ рд╕реБрд░реБ рд╣реБрдиреНрдЫ, рдпреЛ рдкреНрд░рд╛рдпрдГ рд╕реНрдкрд╖реНрдЯ рд╣реБрдБрджреИрди рдХрд┐ рдХреБрди рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рд▓рдХреНрд╖рд┐рдд rootfs рдорд╛ рдЬрд╛рдиреЗрдЫрдиреНред

рдЕрд░реНрдХреЛ рд╢рдмреНрджрдорд╛, рдпреЛ LFS, рдмрд┐рд▓реНрдбрд░реВрдЯ рд╡рд╛ рдпреЛрдХреНрдЯреЛ (рд╡рд╛ рдЕрд░реВ рдХреЗрд╣рд┐) рд╣рдбрдкреНрди рдзреЗрд░реИ рдЪрд╛рдБрдбреЛ рдЫ, рддрд░ рддрдкрд╛рдИрдВрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕реБрд░реБ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдзрдиреАрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ (рдорд╕рдБрдЧ рдкрд╛рдпрд▓рдЯ рдирдореВрдирд╛рд╣рд░реВрдорд╛ 4GB eMMC рдЫ) рддреНрдпрд╣рд╛рдБ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рд╡рд┐рддрд░рдг рдЧрд░реНрдиреЗ рдПрдЙрдЯрд╛ рддрд░рд┐рдХрд╛ рдЫ рдЬрд╕рд▓реЗ рдЙрдиреАрд╣рд░реВрд▓рд╛рдИ рд╣рд╛рд▓ рд╣рд░рд╛рдЗрд░рд╣реЗрдХреЛ рдЪреАрдЬрд╣рд░реВ рджреНрд░реБрдд рд░реВрдкрдорд╛ рдбреЗрд▓рд┐рднрд░ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рд╕рдБрдзреИ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВрдХреЛ рд╕реВрдЪреАрд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рд░ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╕реВрдЪреА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рд▓рдХреНрд╖реНрдп rootfsред

рдпреЛ рд▓реЗрдЦ рдирдпрд╛рдБ рд╣реЛрдЗрди рд░ рд╕рд░рд▓ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЯрд╛рдБрд╕реНрдиреЗ рдирд┐рд░реНрджреЗрд╢рди рд╣реЛред

рд▓реЗрдЦрдХреЛ рдЙрджреНрджреЗрд╢реНрдп рдПрдЖрд░рдПрдо рдмреЛрд░реНрдбрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдмреБрдиреНрдЯреБ рд░реВрдЯрдлрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреБ рд╣реЛ (рдореЗрд░реЛ рдХреЗрд╕рдорд╛, рдХреЛрд▓рд┐рдмреНрд░реА рдЗрдордПрдХреНрд╕7рдбреАрдорд╛ рдЖрдзрд╛рд░рд┐рдд)ред

рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ

рд╣рд╛рдореА рдкреНрд░рддрд┐рдХреГрддрд┐рдХреЛ рд▓рд╛рдЧрд┐ рд▓рдХреНрд╖рд┐рдд rootfs рдЬрдореНрдорд╛ рдЧрд░реНрдЫреМрдВред

Ubuntu рдмреЗрд╕ рдЕрдирдкреНрдпрд╛рдХ рдЧрд░реНрджреИ

рд╣рд╛рдореА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд░ рдЖрдлреНрдиреИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдорд╛ рдЖрдзрд╛рд░рд┐рдд рд░рд┐рд▓рд┐рдЬ рдЖрдлреИрдВ рдЫрд╛рдиреНрдЫреМрдВред рдпрд╣рд╛рдБ рдореИрд▓реЗ 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 рд╣реЛрд╕реНрдЯ рд░ рдЖрд░реНрдо рдЧреЗрд╕реНрдЯрдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрдВрд▓реЗ qemu рдХреЛ i386 рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:
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

рдХреНрд░реЛрдЯ

рд╕рд░рд▓ рд▓рд┐рдкрд┐:

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

рдердк рд░реВрдкрдорд╛, рд╣рд╛рдореА autopush рд╕реЗрдЯрд┐рдЩ рд╕рдВрдЧ etckeeper рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ

рдард┐рдХ рдЫ, рдорд╛рдиреМрдВ рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╡рд┐рддрд░рдг рдЧрд░реНтАНрдпреМрдВ, рд╣рд╛рдореНрд░реЛ рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдкрдЫрд┐рд▓реНрд▓рд╛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рдХрд╕рд░реА рдЬрдореНрдорд╛ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдХрд╛рдо рд╕реБрд░реБ рднрдпреЛред

etckeeper рд╣рд╛рдореНрд░реЛ рд╕рд╣рдпреЛрдЧрдорд╛ рдЖрдЙрди рд╕рдХреНрдЫред

рд╕реБрд░рдХреНрд╖рд╛ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдорд╛рдорд▓рд╛ рд╣реЛ:

  • рддрдкрд╛рдЗрдБ рдХреЗрд╣рд┐ рд╢рд╛рдЦрд╛рд╣рд░реБ рдХреЛ рд░рдХреНрд╖рд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
  • рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдЮреНрдЬреА рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреБрд╣реЛрд╕реН
  • рдмрд▓ рдкреБрд╢ рдЕрдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН
  • рдЖрджрд┐ ...
# ssh-keygen
# apt install etckeeper
# etckeeper init
# cd /etc
# git remote add origin ...

Autopush рд╕реЗрдЯ рдЕрдк рдЧрд░реМрдВ

рд╣рд╛рдореА, рдЕрд╡рд╢реНрдп рдкрдирд┐, рдЙрдкрдХрд░рдгрдорд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рд╢рд╛рдЦрд╛рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ (рдорд╛рдиреМрдВ рд╣рд╛рдореА рдПрдЙрдЯрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛ рд╕реЗрд╡рд╛ рдмрдирд╛рдЙрдБрдЫреМрдВ рдЬреБрди рдпреЛ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рд╕реБрд░реВ рд╣реБрдиреНрдЫ)ред

# 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)
qemu рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ chroot рд╕рдВрдЧ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрджреИ
ARM рдХреЛ рд▓рд╛рдЧрд┐ Ubuntu rootfs рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ
рд╕реНрдХреНрд░реНрдпрд╛рдЪрдмрд╛рдЯ рдХрд╕реНрдЯрдо Ubuntu рд▓рд╛рдЗрдн рдХрд╕рд░реА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ
Crossdev qemu-static-user-chroot
рдЖрджрд┐ рд░рдХреНрд╖рдХ

getdents64 рд╕рдорд╕реНрдпрд╛

readdir() рд▓реЗ 32-bit рд╣реЛрд╕реНрдЯрдорд╛ 64-bit user-static qemu рдХреЛ рд▓рд╛рдЧрд┐ NULL (errno=EOVERFLOW) рдлрд░реНрдХрд╛рдЙрдБрдЫ
Ext4 64 рдмрд┐рдЯ рд╣реНрдпрд╛рд╕рд▓реЗ 32 рдмрд┐рдЯ glibc 2.28+ рдмреНрд░реЗрдХ рдЧрд░реНрдЫ
QEMU рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рдЗрдореБрд▓реЗрд╢рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ armhf рдХреЛ рд▓рд╛рдЧрд┐ compiler_id_detection рдЕрд╕рдлрд▓ рд╣реБрдиреНрдЫ
CMake рд▓реЗ qemu-arm рдЕрдиреНрддрд░реНрдЧрдд рдареАрдХрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджреИрди

рд╕реНрд░реЛрдд: www.habr.com