"เด†เดฆเตเดฏเด‚ เดฎเตเดคเตฝ" ARM-เดจเดพเดฏเดฟ เด’เดฐเต เด‰เดฌเตเดฃเตเดŸเต เด‡เดฎเต‡เดœเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต

เดตเดฟเด•เดธเดจเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดŸเดพเตผเด—เต†เดฑเตเดฑเต เดฑเต‚เดŸเตเดŸเตเดซเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดเดคเตŠเด•เตเด•เต† เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เดชเต‹เด•เตเดฎเต†เดจเตเดจเต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดตเตเดฏเด•เตเดคเดฎเดฒเตเดฒ.

เดฎเดฑเตเดฑเตŠเดฐเต เดตเดฟเดงเดคเตเดคเดฟเตฝ เดชเดฑเดžเตเดžเดพเตฝ, LFS, เดฌเดฟเตฝเดกเตเดฑเต‚เดŸเตเดŸเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฏเต‹เด•เตเดฑเตเดฑเต‹ (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเต†เดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚) เดชเดฟเดŸเดฟเด•เตเด•เดพเตป เดตเดณเดฐเต† เดจเต‡เดฐเดคเตเดคเต† เดคเดจเตเดจเต†, เดŽเดจเตเดจเดพเตฝ เดจเดฟเด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดธเดฎเตเดชเดจเตเดจเตผเด•เตเด•เต (เดชเตˆเดฒเดฑเตเดฑเต เดธเดพเดฎเตเดชเดฟเดณเตเด•เดณเดฟเตฝ เดŽเดจเดฟเด•เตเด•เต 4GB eMMC เด‰เดฃเตเดŸเต) เดกเต†เดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เต เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดฎเดพเตผเด—เดฎเตเดฃเตเดŸเต, เด…เดคเต เดจเดฟเดฒเดตเดฟเตฝ เดจเดทเตโ€ŒเดŸเดฎเดพเดฏ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดตเต‡เด—เดคเตเดคเดฟเตฝ เดกเต†เดฒเดฟเดตเตผ เดšเต†เดฏเตเดฏเดพเตป เด…เดตเดฐเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเด‚, เดคเตเดŸเตผเดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดŽเดชเตเดชเต‹เดดเตเด‚ เดชเดพเด•เตเด•เต‡เดœเตเด•เดณเตเดŸเต† เดฒเดฟเดธเตโ€Œเดฑเตเดฑเตเด•เตพ เดถเต‡เด–เดฐเดฟเด•เตเด•เดพเดจเตเด‚ เด…เดคเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚. เดฒเด•เตเดทเตเดฏเด‚ เดฑเต‚เดŸเตเดŸเตเดซเตเด•เตพ.

เดˆ เดฒเต‡เด–เดจเด‚ เดชเตเดคเดฟเดฏเดคเดฒเตเดฒ, เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เด•เต‹เดชเตเดชเดฟ-เดชเต‡เดธเตเดฑเตเดฑเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฎเดพเดฃเต.

ARM เดฌเต‹เตผเดกเตเด•เตพเด•เตเด•เดพเดฏเดฟ เด‰เดฌเตเดฃเตเดŸเต เดฑเต‚เดŸเตเดŸเตเดซเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเตเดฑเต† เด‰เดฆเตเดฆเต‡เดถเด‚ (เดŽเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, Colibri imx7d เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณเดคเดพเดฃเต).

เด’เดฐเต เด‡เดฎเต‡เดœเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต

เดžเด™เตเด™เตพ เดŸเดพเตผเด—เต†เดฑเตเดฑเต เดฑเต‚เดŸเตเดŸเตเดซเตเด•เตพ เดฑเต†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดพเดฏเดฟ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตเดจเตเดจเต.

เด‰เดฌเตเดฃเตเดŸเต เดฌเต‡เดธเต เด…เตบเดชเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เด†เดตเดถเตเดฏเดคเตเดคเต†เดฏเตเด‚ เดžเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เดฎเตเตปเด—เดฃเดจเด•เดณเต†เดฏเตเด‚ เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดžเด™เตเด™เตพ เดธเตเดตเดฏเด‚ เดฑเดฟเดฒเต€เดธเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเต. เด‡เดตเดฟเดŸเต† เดžเดพเตป 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

เด•เต‡เตผเดฃเตฝ เดนเต†เดกเตผ เดซเดฏเดฒเตเด•เดณเตเด‚ เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เดณเตเด‚ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เด•เดพเดฐเตเดฏเดฎเดพเดฃเต. เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดžเด™เตเด™เตพ เด‰เดฌเตเดฃเตเดŸเต เดตเดดเดฟ เดฌเต‚เดŸเตเดŸเตเดฒเต‹เดกเตผ, เด•เต‡เตผเดฃเตฝ, เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เตพ, เดกเดฟเดตเตˆเดธเต เดŸเตเดฐเต€ เดŽเดจเตเดจเดฟเดต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดฟเดฒเตเดฒ. เด…เดตเตผ เดชเตเดฑเดคเตเดคเต เดจเดฟเดจเตเดจเต เดžเด™เตเด™เดณเตเดŸเต† เด…เดŸเตเดคเตเดคเต‡เด•เตเด•เต เดตเดฐเตเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดžเด™เตเด™เตพ เด…เดตเดฐเต† เดธเตเดตเดฏเด‚ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฌเต‹เตผเดกเต เดจเดฟเตผเดฎเตเดฎเดพเดคเดพเดตเต เด…เดต เดžเด™เตเด™เตพเด•เตเด•เต เดจเตฝเด•เตเด‚, เดเดคเต เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเดฒเตเด‚ เด‡เดคเต เดˆ เดจเดฟเตผเดฆเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเดฑเต† เดชเดฐเดฟเดงเดฟเด•เตเด•เดชเตเดชเตเดฑเดฎเดพเดฃเต.

เด’เดฐเต เดชเดฐเดฟเดงเดฟ เดตเดฐเต†, เดชเดคเดฟเดชเตเดชเต เดตเตเดฏเดคเดฟเดšเดฒเดจเด‚ เดธเตเดตเต€เด•เดพเดฐเตเดฏเดฎเดพเดฃเต, เดชเด•เตเดทเต‡ เด…เดต เด•เต‡เตผเดฃเตฝ เดฌเดฟเตฝเดกเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเดŸเตเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต.

# 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 เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดพเด‚

เดถเดฐเดฟ, เดžเด™เตเด™เตพ เดžเด™เตเด™เดณเตเดŸเต† เด…เดธเด‚เดฌเตเดฒเดฟ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดคเตเดตเต†เดจเตเดจเต เดชเดฑเดฏเดพเด‚, เดชเดฟเดจเตเดจเต€เดŸเต เดžเด™เตเด™เดณเตเดŸเต† เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเดคเดฟเดชเตเดชเตเด•เตพ เดŽเด™เตเด™เดจเต† เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เดพเด‚ เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดœเต‹เดฒเดฟ เด†เดฐเด‚เดญเดฟเดšเตเดšเต.

เดคเตเดŸเด™เตเด™เดฟเดฏเดตเตผ เดžเด™เตเด™เดณเตเดŸเต† เดธเดนเดพเดฏเดคเตเดคเดฟเดจเต เดตเดฐเดพเด‚.

เดธเตเดฐเด•เตเดท เดตเตเดฏเด•เตเดคเดฟเดชเดฐเดฎเดพเดฏ เด•เดพเดฐเตเดฏเดฎเดพเดฃเต:

  • เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดšเดฟเดฒ เดถเดพเด–เด•เตพ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚
  • เด“เดฐเต‹ เด‰เดชเด•เดฐเดฃเดคเตเดคเดฟเดจเตเด‚ เด’เดฐเต เด…เดฆเตเดตเดฟเดคเต€เดฏ เด•เต€ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•
  • เดฌเดฒเดชเตเดฐเดฏเต‹เด—เด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเด•เตเด•เตเด•
  • เดคเตเดŸเด™เตเด™เดฟเดฏเดต. ...
# 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)
qemu เดฏเต‚เดธเตผ chroot เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเตเดจเตเดจเต
ARM-เดจเดพเดฏเดฟ เด‰เดฌเตเดฃเตเดŸเต เดฑเต‚เดŸเตเดŸเตเดซเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต
เด†เดฆเตเดฏเด‚ เดฎเตเดคเตฝ เด’เดฐเต เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดค เด‰เดฌเตเดฃเตเดŸเต เดฒเตˆเดตเต เดŽเด™เตเด™เดจเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเด‚
Crossdev qemu-static-user-chroot
เดฎเตเดคเดฒเดพเดฏเดต

getdents64 เดชเตเดฐเดถเตเดจเด‚

readdir() 32-เดฌเดฟเดฑเตเดฑเต เดนเต‹เดธเตเดฑเตเดฑเดฟเตฝ 64-เดฌเดฟเดฑเตเดฑเต เดฏเต‚เดธเตผ-เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต qemu-เดจเต NULL (errno=EOVERFLOW) เดจเตฝเด•เตเดจเตเดจเต
Ext4 64 เดฌเดฟเดฑเตเดฑเต เดนเดพเดทเต 32 เดฌเดฟเดฑเตเดฑเต glibc 2.28+ เดคเด•เตผเด•เตเด•เตเดจเตเดจเต
QEMU เดฏเต‚เดธเตผ-เดฎเต‹เดกเต เดŽเดฎเตเดฒเต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ armhf-เดจเต compiler_id_detection เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต
qemu-arm-เดจเต เด•เต€เดดเดฟเตฝ CMake เดถเดฐเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com