"เจธเจ•เฉเจฐเฉˆเจš เจคเฉ‹เจ‚" ARM เจฒเจˆ เจ‡เฉฑเจ• เจ‰เจฌเฉฐเจŸเฉ‚ เจšเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจ‰เจฃเจพ

เจœเจฆเฉ‹เจ‚ เจตเจฟเจ•เจพเจธ เจนเฉเจฃเฉ‡ เจธเจผเฉเจฐเฉ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจ‡เจน เจ…เจ•เจธเจฐ เจธเจชเฉฑเจธเจผเจŸ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจ•เจฟเจนเฉœเฉ‡ เจชเฉˆเจ•เฉ‡เจœ เจŸเจพเจฐเจ—เฉ‡เจŸ เจฐเฉ‚เจŸเจซ 'เจคเฉ‡ เจœเจพเจฃเจ—เฉ‡เฅค

เจฆเฉ‚เจœเฉ‡ เจธเจผเจฌเจฆเจพเจ‚ เจตเจฟเฉฑเจš, เจเจฒเจเจซเจเจธ, เจฌเจฟเจฒเจกเจฐเฉ‚เจŸ เจœเจพเจ‚ เจฏเฉ‹เจ•เจŸเฉ‹ (เจœเจพเจ‚ เจ•เฉเจ เจนเฉ‹เจฐ) เจจเฉ‚เฉฐ เจซเฉœเจจเจพ เจฌเจนเฉเจค เจœเจฒเจฆเฉ€ เจนเฉˆ, เจชเจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ…เจฎเฉ€เจฐเจพเจ‚ เจฒเจˆ (เจฎเฉ‡เจฐเฉ‡ เจ•เฉ‹เจฒ เจชเจพเจ‡เจฒเจŸ เจจเจฎเฉ‚เจจเฉ‡ 'เจคเฉ‡ 4GB eMMC เจนเฉˆ) เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฐเจกเจฃ เจฆเจพ เจ‡เฉฑเจ• เจคเจฐเฉ€เจ•เจพ เจนเฉˆ เจœเฉ‹ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เจธ เจตเฉ‡เจฒเฉ‡ เจ—เฉเฉฐเจฎ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจ•เฉเจ เจœเจฒเจฆเฉ€ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเฉ‡เจตเฉ‡เจ—เจพ, เจ…เจคเฉ‡ เจซเจฟเจฐ เจ…เจธเฉ€เจ‚ เจนเจฎเฉ‡เจธเจผเจพ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจ‡เจ•เฉฑเจ เฉ€ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚. เจŸเฉ€เจšเจพ rootfs.

เจ‡เจน เจฒเฉ‡เจ– เจจเจตเจพเจ‚ เจจเจนเฉ€เจ‚ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจ•เจพเจชเฉ€-เจชเฉ‡เจธเจŸ เจนเจฆเจพเจ‡เจค เจนเฉˆเฅค

เจฒเฉ‡เจ– เจฆเจพ เจ‰เจฆเฉ‡เจธเจผ เจเจ†เจฐเจเจฎ เจฌเฉ‹เจฐเจกเจพเจ‚ เจฒเจˆ เจ‰เจฌเฉฐเจŸเฉ‚ เจฐเฉ‚เจŸเจซเจธ เจฌเจฃเจพเจ‰เจฃเจพ เจนเฉˆ (เจฎเฉ‡เจฐเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, เจ•เฉ‹เจฒเฉ€เจฌเจฐเฉ€ 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 เจจเฉ‚เฉฐ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚

เจ–เฉˆเจฐ, เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ€ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจจเฉ‚เฉฐ เจตเฉฐเจกเจฟเจ†, เจ•เฉฐเจฎ เจ‡เจธ เจ—เฉฑเจฒ 'เจคเฉ‡ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจ‡เจ† เจ•เจฟ เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจธเจพเจกเฉ‡ เจธเจฟเจธเจŸเจฎ เจฆเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเจจเจพ เจนเฉˆเฅค

etckeeper เจธเจพเจกเฉ€ เจฎเจฆเจฆ เจฒเจˆ เจ† เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจธเฉเจฐเฉฑเจ–เจฟเจ† เจ‡เฉฑเจ• เจจเจฟเฉฑเจœเฉ€ เจฎเจพเจฎเจฒเจพ เจนเฉˆ:

  • เจคเฉเจธเฉ€เจ‚ เจ•เฉเจ เจธเจผเจพเจ–เจพเจตเจพเจ‚ เจฆเฉ€ เจฐเฉฑเจ–เจฟเจ† เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹
  • เจนเจฐเฉ‡เจ• เจกเจฟเจตเจพเจˆเจธ เจฒเจˆ เจ‡เฉฑเจ• เจตเจฟเจฒเฉฑเจ–เจฃ เจ•เฉเฉฐเจœเฉ€ เจคเจฟเจ†เจฐ เจ•เจฐเฉ‹
  • เจซเฉ‹เจฐเจธ เจชเฉเจธเจผ เจจเฉ‚เฉฐ เจ…เจฏเฉ‹เจ— เจ•เจฐเฉ‹
  • เจ†เจฆเจฟ ...
# ssh-keygen
# apt install etckeeper
# etckeeper init
# cd /etc
# git remote add origin ...

เจšเจฒเฉ‹ เจ†เจŸเฉ‹เจชเฉเจธเจผ เจธเฉˆเจŸ เจ…เจช เจ•เจฐเฉ€เจ

เจ…เจธเฉ€เจ‚, เจฌเฉ‡เจธเจผเจ•, เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจกเจฟเจตเจพเจˆเจธ 'เจคเฉ‡ เจธเจผเจพเจ–เจพเจตเจพเจ‚ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ (เจ†เจ“ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจ•เฉเจฐเจฟเจชเจŸ เจœเจพเจ‚ เจธเฉ‡เจตเจพ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจœเฉ‹ เจชเจนเจฟเจฒเฉ€ เจตเจพเจฐ เจฒเจพเจ‚เจš เจนเฉ‹เจฃ 'เจคเฉ‡ เจšเฉฑเจฒเฉ‡เจ—เฉ€)เฅค

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

เจœเจพเจ‚ เจ…เจธเฉ€เจ‚ เจ•เฉเจ เจšเฉเจธเจค เจ•เฉฐเจฎ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚...

เจ†เจฒเจธเฉ€ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ

เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ•เฉเจ เจ•เจฟเจธเจฎ เจฆเจพ เจตเจฟเจฒเฉฑเจ–เจฃ เจชเจ›เจพเจฃเจ•เจฐเจคเจพ เจนเฉˆ, เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฐ เจฆเจพ เจธเฉ€เจฐเฉ€เจ…เจฒ เจจเฉฐเจฌเจฐ (เจœเจพเจ‚ MAC - เจ—เฉฐเจญเฉ€เจฐ เจ•เฉฐเจชเจจเฉ€เจ†เจ‚ เจฐเฉ‡เจ‚เจœ เจ–เจฐเฉ€เจฆเจฆเฉ€เจ†เจ‚ เจนเจจ):

เจฌเจฟเฉฑเจฒเฉ€ / เจ–เจฐเฉ€เจฆ / 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-เจฌเจฟเฉฑเจŸ เจ‰เจชเจญเฉ‹เจ—เจคเจพ-เจธเจŸเฉˆเจŸเจฟเจ• เจ•เจฟเจฎเฉ‚ เจฒเจˆ NULL (errno=EOVERFLOW) เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆ
Ext4 64 เจฌเจฟเฉฑเจŸ เจนเฉˆเจธเจผ 32 เจฌเจฟเฉฑเจŸ glibc 2.28+ เจจเฉ‚เฉฐ เจคเฉ‹เฉœเจฆเจพ เจนเฉˆ
compiler_id_detection armhf เจฒเจˆ เจ…เจธเจซเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเจฆเฉ‹เจ‚ QEMU เจ‰เจชเจญเฉ‹เจ—เจคเจพ-เจฎเฉ‹เจก เจ‡เจฎเฉ‚เจฒเฉ‡เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹
CMake qemu-arm เจฆเฉ‡ เจ…เจงเฉ€เจจ เจ เฉ€เจ• เจคเจฐเฉเจนเจพเจ‚ เจ•เฉฐเจฎ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ

เจธเจฐเฉ‹เจค: www.habr.com