αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž’αŸŠαžΌαž”αŸŠαž»αž“αž‘αžΌαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ 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 αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž€αŸ†αžŽαŸ‚ 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

αž‡αŸ’αžšαžΌαž

αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŸαžΆαž˜αž‰αŸ’αž‰αŸ–

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

αž―αž€αžŸαžΆαžšαž”αž‹αž˜αž€αžαžΆαžαžΊαžŽαŸ‚αž› αž“αž·αž„αž˜αŸ‰αžΌαžŒαž»αž›αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž αžΆαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αŸ” αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž™αžΎαž„αž“αžΉαž„αž˜αž·αž“αžŠαŸ†αž‘αžΎαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’ αžαžΊαžŽαŸ‚αž› αž˜αŸ‰αžΌαžŒαž»αž› αž˜αŸ‚αž€αž’αžΆαž„αž§αž”αž€αžšαžŽαŸαžαžΆαž˜αžšαž™αŸˆαž’αŸŠαžΌαž”αŸŠαž»αž“αž‘αžΌαž‘αŸαŸ” αž–αž½αž€αž‚αŸαž“αžΉαž„αž˜αž€αžšαž€αž™αžΎαž„αž–αžΈαžαžΆαž„αž€αŸ’αžšαŸ… αž¬αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž–αž½αž€αž‚αŸαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž¬αž–αž½αž€αž‚αŸαž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž™αžΎαž„αžŠαŸ„αž™αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αž•αž›αž·αžαž€αŸ’αžαžΆαžš αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŽαžΆαž€αŸαžŠαŸ„αž™ αžœαžΆαž αž½αžŸαž–αžΈαžœαž·αžŸαžΆαž›αž—αžΆαž–αž“αŸƒαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž“αŸαŸ‡αŸ”

αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αžšαž·αžαžαŸ’αž›αŸ‡ αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαž“αŸƒαž€αŸ†αžŽαŸ‚αž‚αžΊαž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αž”αžΆαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž™αž€αžœαžΆαž…αŸαž‰αž–αžΈαž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαžαžΊαžŽαŸ‚αž›αŸ”

# 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 αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ autopush

αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹ αž§αž”αž˜αžΆαžαžΆαž™αžΎαž„αž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαžšαž”αžŸαŸ‹αž™αžΎαž„ αž€αžΆαžšαž„αžΆαžšαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž›αŸ’αž’αž”αŸ†αž•αž»αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž€αŸ†αžŽαŸ‚αž•αŸ’αžŸαŸαž„αŸ—αž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

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 user chroot
αž€αžΆαžšαž€αžŸαžΆαž„ Ubuntu rootfs αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ ARM
αžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαž Ubuntu αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αž•αŸ’αž‘αžΆαž›αŸ‹αž–αžΈαžŠαŸ†αž”αžΌαž„
Crossdev qemu-static-user-chroot
αž‡αžΆαžŠαžΎαž˜αŸ”

getdents64 αž”αž‰αŸ’αž αžΆ

readdir() αžαŸ’αžšαž‘αž”αŸ‹ NULL (errno=EOVERFLOW) αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ 32-bit user-static qemu αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ 64-bit
Ext4 64 bit hash αž”αŸ†αž”αŸ‚αž€ 32 bit glibc 2.28+
compiler_id_detection αž”αžšαžΆαž‡αŸαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ armhf αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎαž€αžΆαžšαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αžšαž”αŸ€αž”αž’αŸ’αž“αž€αž”αŸ’αžšαžΎ QEMU
CMake αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αŸ…αž€αŸ’αžšαŸ„αž˜ qemu-arm

αž”αŸ’αžšαž—αž–: www.habr.com