เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš Ubuntu เบชเปเบฒเบฅเบฑเบš ARM "เบˆเบฒเบ scratch"

เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบžเบฝเบ‡เปเบ•เปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบกเบฑเบ™เบกเบฑเบเบˆเบฐเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบŠเบธเบ”เปƒเบ”เบˆเบฐเป„เบ›เบซเบฒ 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 เปƒเบ™ kernel

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบเบฒเบ™เปเบˆเบเบขเบฒเบเบ—เบปเปˆเบงเป„เบ›, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ BINFMT_MISC เปเบฅเบฐเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบ–เป‰เบฒเบšเปเปˆเปเบกเปˆเบ™, เบ‚เป‰เบญเบเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบฎเบนเป‰เบงเบดเบ—เบตเป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ BINFMT เปƒเบ™เปเบเปˆเบ™.

เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒ BINFMT_MISC เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เปƒเบ™ kernel:

$ 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 host เปเบฅเบฐโ€‹เปเบ‚เบ™โ€‹เปเบ‚เบโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เปƒเบŠเป‰ 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

เบฎเบฒเบ

script เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹:

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

เป„เบŸเบฅเปŒเบชเปˆเบงเบ™เบซเบปเบงเบ‚เบญเบ‡ Kernel เปเบฅเบฐเป‚เบกเบ”เบนเบ™เปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เปเบ™เปˆเบ™เบญเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡ bootloader, kernel, modules, device tree เบœเปˆเบฒเบ™ 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 เบ”เป‰เบงเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ 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

เบกเบฒเบชเป‰เบฒเบ‡ script เบ‡เปˆเบฒเบเป†:

# 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

เปเบฅเบฐเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ” - เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบงเบฅเบฒเปƒเบ”เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปเบฅเบฐเบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบŠเบธเบ”เบชเปเบฒเบฅเบฑเบš firmware เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ.

เบงเบฑเบ”เบชเบฐเบ”เบธเบ—เบตเปˆเปเบ™เบฐเบ™เปเบฒ

BINFMT_MISC
เบฎเบญเบ‡เบฎเบฑเบš Kernel เบชเปเบฒเบฅเบฑเบšเบฎเบนเบšเปเบšเบšเบ–เบฒเบ™เบชเบญเบ‡เบญเบทเปˆเบ™เป† (binfmt_misc)
เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰ qemu chroot
เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบฒเบ Ubuntu เบชเปเบฒเบฅเบฑเบš ARM
เบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡ Ubuntu custom เบชเบปเบ”เบˆเบฒเบ scratch
Crossdev qemu-static-user-chroot
เปเบฅเบฐ เบญเบทเปˆเบ™เป†

getdents64 เบšเบฑเบ™เบซเบฒ

readdir() เบชเบปเปˆเบ‡เบ„เบทเบ™ NULL (errno=EOVERFLOW) เบชเปเบฒเบฅเบฑเบš 32-bit user-static qemu เบขเบนเปˆเปƒเบ™เป‚เบฎเบ” 64-bit
Ext4 64 bit hash breaks 32 bit glibc 2.28+
compiler_id_detection เบฅเบปเป‰เบกเป€เบซเบฅเบงเบชเปเบฒเบฅเบฑเบš armhf เปƒเบ™เป€เบงเบฅเบฒเบ™เปเบฒเปƒเบŠเป‰ QEMU เบฎเบนเบšเปเบšเบšเบœเบนเป‰เปƒเบŠเป‰เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡
CMake เป€เบฎเบฑเบ”เบงเบฝเบเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบžเบฒเบเปƒเบ•เป‰ qemu-arm

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com