αα ααααααααΆαα’αα·ααααααααΎαααα αΆααααααΎα ααΆααΏααααΆαα·αα αααΆααααΆαααα ααααΆαα½αααΉααα ααΆαα 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
α αΎααααα αΎαααΆααΆααα’αα - αααααΆααααΈαα½ααααααΎαα’αΆα αα·αα·αααααΎαααΆαααααΆααααααΌα αα·ααααααΎααααααΈαααα αααααααΆαααααααα·ααΈααααααααααα α
αααααΆαααααααΆαααααΆα
getdents64 αααα αΆ
ααααα: www.habr.com