ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° ΡΠΎΠΊΡ-ΡΠΎ Π·Π°ΠΏΠΎΡΠ½Π΅, ΡΠ΅ΡΡΠΎ Π½Π΅ Π΅ ΡΡΠ½ΠΎ ΠΊΠΎΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΠ΅ ΠΎΡΠΈΠ΄Π°Ρ Π΄ΠΎ ΡΠ΅Π»Π΅Π²Π°ΡΠ° 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 Ρ ΠΎΡΡ ΠΈ arm guest ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ 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
chroot
ΠΡΠΎΡΡ ΡΠΊΡΠΈΠΏΡ:
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
ΠΠ°Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ ΡΠ° ΠΎΡΠ΄Π΅Π»Π΅Π½ Π²ΡΠΏΡΠΎΡ. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π½ΡΠΌΠ° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ Π±ΡΡΡΠ»ΠΎΡΠ΄ΡΡΠ°, ΡΠ΄ΡΠΎΡΠΎ, ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅, Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΡΠ° ΡΡΠ΅Π· 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 Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅
Π, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΠΈΡ ΠΌΠ΅ Π½Π°ΡΠ΅ΡΠΎ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅, Π·Π°ΠΏΠΎΡΠ½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΏΠΎ ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΡΠ³Π»ΠΎΠ±ΠΈΠΌ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° Π½Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°.
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
Π ΡΠΎΠ²Π° Π΅ Π²ΡΠΈΡΠΊΠΎ - ΡΠ»Π΅Π΄ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠΏΠΈΡΡΠΊ Ρ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° ΡΠ΅Π»Π΅Π²ΠΈΡ ΡΡΡΠΌΡΠ΅Ρ.
ΠΡΠ΅ΠΏΠΎΡΡΡΠΈΡΠ΅Π»Π½ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ getdents64
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com