เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ™เบตเป‰เบกเบฒเบˆเบฒเบเปƒเบช? [Debian/Ubuntu]

เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ‚เบญเบ‡เป‚เบžเบชเบ™เบตเป‰เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เป€เบ—เบฑเบเบ™เบดเบเบเบฒเบ™เบ”เบตเบšเบฑเบเปƒเบ™ debian/ubuntu เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบš "เบเบฒเบ™เบŠเบญเบเบซเบฒเปเบซเบผเปˆเบ‡" เปƒเบ™เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฅเบฐเบšเบปเบš.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš: เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบเบฒเบฐเป€เบเบตเป‰เบเบซเบผเบฒเบเบ‚เบญเบ‡เบชเปเบฒเป€เบ™เบปเบฒ tar.gz เบ‚เบญเบ‡ OS เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบŸเบทเป‰เบ™เบŸเบนเปเบฅเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบก:

update-initramfs: Generating /boot/initrd.img-4.15.0-54-generic
W: initramfs-tools configuration sets RESUME=/dev/mapper/U1563304817I0-swap
W: but no matching swap device is available.
I: The initramfs will attempt to resume from /dev/dm-1
I: (/dev/mapper/foobar-swap)
I: Set the RESUME variable to override this.

เป€เบ›เบปเป‰เบฒเปเบฒเบ: เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบ„เปˆเบฒเบ™เบตเป‰ (U1563304817I0) เบกเบฒเบˆเบฒเบเปƒเบช เปเบฅเบฐเบงเบดเบ—เบตเบ›เปˆเบฝเบ™เบกเบฑเบ™เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒ, เบšเปเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปƒเบ™เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡, เปเบ•เปˆเบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Linux..

เบญเบฑเบ™เบ”เบฑเบšเบ—เบต 1: RESUME เบกเบฒเบˆเบฒเบเปƒเบช?

# cd /etc
# grep -r RESUME
initramfs-tools/conf.d/resume:RESUME=/dev/mapper/U1563304817I0-swap

เบžเบงเบเป€เบฎเบปเบฒ recursively (-r) เบŠเบญเบเบซเบฒเบเบฒเบ™เบเปˆเบฒเบงเป€เบ–เบดเบ‡เบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต /etc (เบšเปˆเบญเบ™เบ—เบตเปˆ configs เบชเปˆเบงเบ™เปƒเบซเบเปˆเบขเบนเปˆ). เบžเบงเบเป€เบฎเบปเบฒเบŠเบญเบเบซเบฒ snippet conf.d, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เป‚เบ”เบเบŠเบธเบ” initramfs-tools.

snippet เบ™เบตเป‰เบกเบฒเบˆเบฒเบเปƒเบช?

เบกเบตเบชเบฒเบกเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ„เบท:

  1. เบ›เบญเบกโ€‹เป€เบงโ€‹เบฅเบฒ (เบกเบตโ€‹เบšเบฒเบ‡โ€‹เบ„เบปเบ™โ€‹เป€เบญเบปเบฒโ€‹เบกเบฑเบ™โ€‹เปเบฅเบฐโ€‹เบฅเบทเบกโ€‹)
  2. Config เบˆเบฒเบเบŠเบธเบ”
  3. Config เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบšเบฒเบ‡เบชเบฐเบ„เบดเบšเบˆเบฒเบเบŠเบธเบ”เบฅเบฐเบšเบปเบš

เบ‚เปโ€‹เปƒเบซเป‰โ€‹เบเบงเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบ‚เปเป‰โ€‹เบ—เบต 2 (เป€เบ›เบฑเบ™โ€‹เบ—เบตเปˆโ€‹เบ‡เปˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”):

 dpkg -S initramfs-tools/conf.d/resume
dpkg-query: no path found matching pattern *initramfs-tools/conf.d/resume*

dpkg -S เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ„เบปเป‰เบ™เบซเบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบŠเบญเบเบซเบฒเบŠเบธเบ”เป„เบŸเบฅเปŒเปƒเบ”เป€เบ›เบฑเบ™เบ‚เบญเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบ—เบตเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”:

dpkg -S resolv.conf
manpages: /usr/share/man/man5/resolv.conf.5.gz
systemd: /lib/systemd/resolv.conf

เปƒเบซเป‰เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ: เป„เบŸเบฅเปŒ initramfs-tools/conf.d/resume เบšเปเปˆเป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเบˆเบฒเบเบŠเบธเบ”. เบšเบฒเบ‡เบ—เบตเบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบขเบนเปˆเปƒเบ™เบชเบฐเบ„เบดเบš postinst/preinst เบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบšเป? เปƒเบซเป‰เบเบงเบ”เป€เบšเบดเปˆเบ‡เบชเบฐเบšเบฑเบšเป€เบฅเบเบ—เบต 3.

# cd /var/lib/dpkg/info/
# grep -r initramfs-tools/conf.d/resume *
initramfs-tools-core.postrm:    rm -f /etc/initramfs-tools/conf.d/resume

เปƒเบ™เบฅเบฒเบเบเบฒเบ™ /var/lib/dpkg/info/ เบกเบตเบชเบฐเบšเบฑเบš unpacked เบ‚เบญเบ‡ "metafiles" เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ” (เบชเบฐเบ„เบดเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ / เบเบฒเบ™เป‚เบเบเบเป‰เบฒเบ, เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบŠเบธเบ”, เปเบฅเบฐเบญเบทเปˆเบ™เป†). เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เปเบ›เบเบ—เบตเปˆ, เป„เบŸเบฅเปŒเบ™เบตเป‰เบ–เบทเบเป‚เบเบเบเป‰เบฒเบเบญเบญเบเปƒเบ™ postrm (เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ–เบญเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡) เบ‚เบญเบ‡เบŠเบธเบ” initramfs-tools-core. เบ‚เปเปƒเบซเป‰เป€เบšเบดเปˆเบ‡เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡ postinst เบ‚เบญเบ‡เบกเบฑเบ™ ... เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต conf.d.

เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบŠเบธเบ” initramfs-tools-core.

# dpkg -L initramfs-tools-core
...
/usr/share/initramfs-tools/hooks/resume
...

เบ—เบตเบกเบ‡เบฒเบ™ dpkg -L เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบšเบดเปˆเบ‡เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเบˆเบฒเบเบŠเบธเบ”เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบถเบเบชเบฒ. เบเบฒเบ™เบเบงเบ”เบชเบญเบšเป„เบŸเบฅเปŒเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบ•เบปเบงเปเบ›เบ™เบตเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปเบ™เบงเปƒเบ”, เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เบšเบญเบเบงเปˆเบฒเบกเบฑเบ™เบกเบฒเบˆเบฒเบเปƒเบช.

debconf

เบกเบฑเบ™ turns เปƒเบซเป‰ เป€เบซเบฑเบ™ เบงเปˆเบฒ เบ™เบตเป‰ เปเบกเปˆเบ™ เบ›เบญเบก เบ‚เบญเบ‡ เบœเบนเป‰ เปƒเบ” เบœเบนเป‰ เบซเบ™เบถเปˆเบ‡ . เปเบกเปˆเบ™เปƒเบœ? เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบปเบงเบ•เบดเบ”เบ•เบฑเป‰เบ‡, เปƒเบซเป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™ Debian เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡ - เบ„เปเบฒเบ•เบญเบšเบ•เปเปˆเบ„เปเบฒเบ–เบฒเบก. เบ—เบธเบเป†เบ„เบฑเป‰เบ‡เบ—เบตเปˆเปเบžเบฑเบเป€เบเบฑเบ”เบ–เบฒเบกเบ„เปเบฒเบ–เบฒเบก, เปเบฅเบฐเปƒเบ™เบซเบผเบฒเบเป†เบเปเบฅเบฐเบ™เบตเป€เบกเบทเปˆเบญเบกเบฑเบ™เบšเปเปˆเบ–เบฒเบกเบ„เปเบฒเบ–เบฒเบกเปเบ•เปˆเปƒเบŠเป‰เบ—เบฒเบ‡เป€เบฅเบทเบญเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ—เบฑเบ‡เบ„เปเบฒเบ–เบฒเบกเปเบฅเบฐเบ„เปเบฒเบ•เบญเบšเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบžเบดเป€เบชเบ”เปƒเบ™ Debian เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ debconf. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ„เปเบฒเบ•เบญเบš (เปเบฅเบฐเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เบ•เบฑเป‰เบ‡เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบŠเบธเบ”เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡ - debconf-set-selections), เบชเปเบฒเบฅเบฑเบšเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ” debconf-get-selections เบˆเบฒเบเบญเบปเบ‡เบ›เบฐเบเบญเบš debconf-utils. เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบšเปเปˆเบžเบปเบšเบซเบเบฑเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ :(debconf-get-selections |grep -i resume เบเบฑเบšเบ„เบทเบ™เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ).

debian-installer

เบœเบนเป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบกเบตเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบ‚เบญเบ‡เบ„เปเบฒเบ•เบญเบšเบ•เปเปˆเบ„เปเบฒเบ–เบฒเบก: /var/log/installer/cdebconf/questions.dat. เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบšเปเปˆเบกเบตเบ„เปเบฒเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบŠเบตเบงเบฐเบ›เบฐเบซเบงเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.
เปเบ•เปˆเบกเบตเป„เบกเป‰เบ—เปˆเบญเบ™เบขเบนเปˆเปƒเบเป‰เป†, เบฅเบงเบกเบ—เบฑเบ‡. syslog, เบšเปˆเบญเบ™เบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ–เบทเบเบ‚เบฝเบ™. เบŠเบธเบ”เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เป„เบ”เป‰เบ–เบทเบเบเปˆเบฒเบงเป€เบ–เบดเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™, เปเบฅเบฐเบขเบนเปˆเป€เบ—เบดเบ‡เบกเบฑเบ™ เบซเบ™เป‰เบฒ เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เบเบฑเบšโ€‹เบญเบฒโ€‹เบซเบฒเบ™โ€‹เป„เบ”เป‰โ€‹.

เบžเบฒเบเปƒเบ™เบžเบงเบเป€เบ‚เบปเบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ„เปเบฒเบ•เบญเบšเบ‚เบญเบ‡เบ„เปเบฒเบ–เบฒเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ‡เปˆเบฒเบ:

  resume="$(mapdevfs "$resume_devfs")"; then
...
    if [ "$do_initrd" = yes ]; then
     ...
            resumeconf=$IT_CONFDIR/resume
....
                echo "RESUME=$resume" >> $resumeconf

mapdevfs เปเบกเปˆเบ™เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™, เปเบฅเบฐเบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบปเบ™เปƒเบˆเปเบกเปˆเบ™ get_resume_partition, เป€เบŠเบดเปˆเบ‡เบญเปˆเบฒเบ™ /proc/swaps เปเบฅเบฐเป€เบฅเบทเบญเบเบญเบฑเบ™เปƒเบซเบเปˆเบ—เบตเปˆเบชเบธเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. Swap เบกเบฒเบˆเบฒเบ partman.

เบ„เปเบฒเบ•เบญเบšเบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ: เป„เบŸเบฅเปŒเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป‚เบ”เบเบœเบนเป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปƒเบ™ /target เปƒเบ™เป€เบงเบฅเบฒเบ•เบดเบ”เบ•เบฑเป‰เบ‡, i.e. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบเปเบฒโ€‹เบฅเบฑเบ‡โ€‹เป€เบงเบปเป‰เบฒโ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบ—เบตเปˆโ€‹เบฎเบนเป‰โ€‹เบˆเบฑเบโ€‹เบ”เบตโ€‹, เปเบ•เปˆโ€‹เป€เบ›เบฑเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ›เบญเบกโ€‹. เบšเปเปˆเบกเบตเบญเบฑเบ™เปƒเบ”เบญเบฑเบ™เปœเบถเปˆเบ‡ เบซเบผเบทเบญเบฑเบ™เปƒเบ”เปƒเบ™เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เป„เบŸเบฅเปŒเบ™เบตเป‰เป„เบ”เป‰.

เป€เบžเบทเปˆเบญเบชเบฐเบซเบผเบธเบš

  1. dpkg เปเบฅเบฐ debconf เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ•เบปเป‰เบ™เบ•เปเปƒเบ™เบเบฒเบ™เบŠเบญเบเบซเบฒเบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป„เบŸเบฅเปŒ.
  2. เบเบฒเบ™เบŠเบญเบเบซเบฒเปƒเบ™ /var/lib/dpkg/info เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเป„เบŸเบฅเปŒเปƒเบ™เป„เบฅเบเบฐเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡.
  3. เบ•เบปเบงเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบ›เบญเบกเบ—เบตเปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบšเปเปˆเป€เบ„เบตเบเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป‚เบ”เบเปƒเบœ (เบเบปเบเป€เบงเบฑเป‰เบ™เบœเบนเป‰เปƒเบŠเป‰), เปเบฅเบฐเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เปƒเบ™เบฅเบฐเบซเบฑเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡.

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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™