เชเซเชฏเชพเชฐเซ เชตเชฟเชเชพเชธ เชฎเชพเชคเซเชฐ เชถเชฐเซ เชฅเชพเชฏ เชเซ, เชคเซเชฏเชพเชฐเซ เชคเซ เชเชฃเซ เชตเชเชค เชธเซเชชเชทเซเช เชนเซเชคเซเช เชจเชฅเซ เชเซ เชเชฏเชพ เชชเซเชเซเชเซ เชฒเชเซเชทเซเชฏ เชฐเซเชเชเชซ เชชเชฐ เชเชถเซ.
เชฌเซเชเชพ เชถเชฌเซเชฆเซเชฎเชพเช เชเชนเซเช เชคเซ, LFS, เชฌเชฟเชฒเซเชกเชฐเซเช เช เชฅเชตเชพ เชฏเซเชเซเชเซ (เช เชฅเชตเชพ เชฌเซเชเซเช เชเชเชเช) เชฎเซเชณเชตเชตเชพเชจเซเช เชเซเชฌ เช เชตเชนเซเชฒเซเช เชเซ, เชชเชฐเชเชคเซ เชคเชฎเชพเชฐเซ เชชเชนเซเชฒเชพเชฅเซ เช เชถเชฐเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชถเซเชฐเซเชฎเชเชค เชฒเซเชเซ เชฎเชพเชเซ (เชฎเชพเชฐเซ เชชเชพเชธเซ เชชเชพเชฏเชฒเซเช เชจเชฎเซเชจเชพเช เชชเชฐ 4GB eMMC เชเซ) เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเชเชจเซ เชตเชฟเชคเชฐเชฃ เชเชฐเชตเชพเชจเซ เชเช เชฎเชพเชฐเซเช เชเซ เชเซ เชคเซเชฎเชจเซ เชนเชพเชฒเชฎเชพเช เชเซเชเซ เชเซ เชคเซ เชเชเชเช เชเชกเชชเชฅเซ เชชเชนเซเชเชเชพเชกเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชถเซ, เช เชจเซ เชชเชเซ เช เชฎเซ เชนเชเชฎเซเชถเชพ เชชเซเชเซเชเซเชจเซ เชธเซเชเชฟ เชเชเชคเซเชฐเชฟเชค เชเชฐเซ เชถเชเซเช เชเซเช เช เชจเซ เชคเซเชจเชพ เชฎเชพเชเซ เชธเซเชเชฟ เชฌเชจเชพเชตเซ เชถเชเซเช เชเซเช. เชฒเชเซเชทเซเชฏ เชฐเซเชเชซเซเชธ.
เช เชฒเซเช เชจเชตเซ เชจเชฅเซ เช เชจเซ เชเช เชธเชฐเชณ เชเซเชชเซ-เชชเซเชธเซเช เชธเซเชเชจเชพ เชเซ.
เชฒเซเชเชจเซ เชนเซเชคเซ เชเชเชฐเชเชฎ เชฌเซเชฐเซเชกเซเชธ เชฎเชพเชเซ เชเชฌเซเชจเซเชเซ เชฐเซเชเชซเซเชธ เชฌเชจเชพเชตเชตเชพเชจเซ เชเซ (เชฎเชพเชฐเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช, เชเซเชฒเชฟเชฌเซเชฐเซ 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
เช เชจเซ เชคเซ เชฌเชงเซ เช เชเซ - เชฅเซเชกเชพ เชธเชฎเชฏ เชชเชเซ เช เชฎเซ เชซเซเชฐเชซเชพเชฐเซ เชเซเช เชถเชเซเช เชเซเช เช เชจเซ เชฒเชเซเชทเซเชฏ เชซเชฐเซเชฎเชตเซเชฐ เชฎเชพเชเซ เชชเซเชเซเชเซเชจเซ เชธเซเชเชฟ เชฌเชจเชพเชตเซ เชถเชเซเช เชเซเช.
เชญเชฒเชพเชฎเชฃ เชเชฐเซเชฒ เชธเชพเชฎเชเซเชฐเซ
getdents64 เชธเชฎเชธเซเชฏเชพ
เชธเซเชฐเซเชธ: www.habr.com