เชตเชพเชฐเซเชคเชพ เชฒเชพเชเชฌเชพ เชธเชฎเชฏ เชชเชนเซเชฒเชพ เชถเชฐเซ เชฅเช เชนเชคเซ, เชเซเชฏเชพเชฐเซ Centos 7 (RHEL 7) เชฐเชฟเชฒเซเช เชฅเช เชนเชคเซ. เชเซ เชคเชฎเซ เชธเซเชเชเซเชธ 6 เชธเชพเชฅเซ เชกเซเชฐเชพเชเชตเซเชธ เชชเชฐ เชเชจเซเชเซเชฐเชฟเชชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเซ เชนเซเชฏ, เชคเซ เชเซเชฏเชพเชฐเซ เชคเชฎเซ เชเชตเชถเซเชฏเช เชเซ เชธเชพเชฅเซ USB เชซเซเชฒเซเชถ เชกเซเชฐเชพเชเชตเชจเซ เชเชจเซเชเซเช เชเชฐเซ เชเซ เชคเซเชฏเชพเชฐเซ เชกเซเชฐเชพเชเชตเชจเชพ เชธเซเชตเชเชพเชฒเชฟเชค เช
เชจเชฒเซเชเชฟเชเชเชฎเชพเช เชเซเช เชธเชฎเชธเซเชฏเชพ เชจ เชนเชคเซ. เชเซ เชเซ, เชเซเชฏเชพเชฐเซ 7 เชฐเซเชฒเชฟเช เชฅเชฏเซเช, เชคเซเชฏเชพเชฐเซ เช
เชเชพเชจเช เชฌเชงเซเช เชคเชฎเชพเชฐเซ เชเชฆเชค เชฎเซเชเชฌ เชเชพเชฎ เชเชฐเชคเซเช เชจ เชนเชคเซเช. เชชเชเซ เชฐเซเชชเชฐเซเชเชพเชฎเชพเช เชเช เชธเชฐเชณ เชฒเซเชเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชกเซเชฐเชพเชเชเชจเซ sysvinit เชชเชฐ เชชเชฐเชค เชเชฐเชตเชพเชจเซ เชเชเซเชฒ เชถเซเชงเชตเชพเชจเซเช เชถเชเซเชฏ เชนเชคเซเช: echo 'omit_dracutmodules+=" systemd "' > /etc/dracut.conf.d/luks-workaround.conf
เชเซเชฃเซ เชคเชฐเชค เช เช
เชฎเชจเซ systemd - เชธเชฟเชธเซเชเชฎ เชธเซเชตเชพเชเชจเชพ เชเชกเชชเซ เช
เชจเซ เชธเชฎเชพเชเชคเชฐ เชฒเซเชเชเชจเซ เชคเชฎเชพเชฎ เชธเซเชเชฆเชฐเชคเชพเชฅเซ เชตเชเชเชฟเชค เชเชฐเซ เชฆเซเชงเซเช, เชเซเชฃเซ เชธเชฟเชธเซเชเชฎ เชธเซเชเชพเชฐเซเชเช
เชช เชธเชฎเชฏเชจเซ เชจเซเชเชงเชชเชพเชคเซเชฐ เชฐเซเชคเซ เชเชเชพเชกเซเชฏเซ.
เชตเชธเซเชคเซเช เชนเชเซ เชชเชฃ เชเซ:
เชเชเซเชฒเชจเซ เชฐเชพเชน เชเซเชฏเชพ เชตเชฟเชจเชพ, เชฎเซเช เชคเซเชจเซ เชฎเชพเชฐเชพ เชฎเชพเชเซ เชฌเชจเชพเชตเซเชฏเซเช, เช
เชจเซ เชนเชตเซ เชนเซเช เชคเซเชจเซ เชฒเซเชเซ เชธเชพเชฅเซ เชถเซเชฐ เชเชฐเซ เชฐเชนเซเชฏเซ เชเซเช, เชเซเชฎเชจเซ เชฐเชธ เชเซ, เชตเชพเชเชเซ.
เชชเชฐเชฟเชเชฏ
Systemd, เชเซเชฏเชพเชฐเซ เชฎเซเช เชธเซเชชเซเชฐเชฅเชฎ Centos 7 เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซเชฏเซเช, เชคเซเชฏเชพเชฐเซ เชเซเช เชฒเชพเชเชฃเซเชเชจเซเช เชเชพเชฐเชฃ เชจเชนเซเชคเซเช, เชเชพเชฐเชฃ เชเซ เชธเชฐเซเชตเชฟเชธ เชฎเซเชจเซเชเชฎเซเชจเซเช เชธเชฟเชจเซเชเซเชเซเชธเชฎเชพเช เชจเชพเชจเชพ เชซเซเชฐเชซเชพเชฐ เชธเชฟเชตเชพเชฏ, เชฎเชจเซ เชถเชฐเซเชเชคเชฎเชพเช เชฌเชนเซ เชซเชฐเช เชจ เชฒเชพเชเซเชฏเซ. เชคเซเชฏเชพเชฐเชฌเชพเชฆ, เชฎเชจเซ systemd เชเชฎเซเชฏเซเช, เชชเชฐเชเชคเซ เชชเซเชฐเชฅเชฎ เชเชพเชช เชฅเซเชกเซ เชฌเชเชกเซเชฒเซ เชนเชคเซ, เชเชพเชฐเชฃ เชเซ dracut เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเชเช เชกเชฟเชธเซเช เชเชจเซเชเซเชฐเชฟเชชเซเชถเชจ เชธเชพเชฅเซ เชเซเชกเชพเชฃเชฎเชพเช systemd เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฌเซเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเซเชเซ เชเชชเชตเชพ เชฎเชพเชเซ เชตเชงเซ เชธเชฎเชฏ เชชเชธเชพเชฐ เชเชฐเซเชฏเซ เชจ เชนเชคเซ. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ, เชคเซ เชเชพเชฎ เชเชฐเซ เชเซ, เชชเชฐเชเชคเซ เชเซเชฏเชพเชฐเซ เชชเชฃ เชธเชฐเซเชตเชฐ เชถเชฐเซ เชฅเชพเชฏ เชคเซเชฏเชพเชฐเซ เชกเชฟเชธเซเช เชชเชพเชธเชตเชฐเซเชก เชฆเชพเชเชฒ เชเชฐเชตเซ เช เชธเซเชฅเซ เชฐเชธเชชเซเชฐเชฆ เชฌเชพเชฌเชค เชจเชฅเซ.
เชญเชฒเชพเชฎเชฃเซเชจเซ เชธเชฎเซเชน เช
เชเชฎเชพเชตเซเชฏเซ เช
เชจเซ เชฎเซเชจเซเชฏเซเช
เชฒเชจเซ เช
เชญเซเชฏเชพเชธ เชเชฐเซเชฏเชพ เชชเชเซ, เชฎเชจเซ เชธเชฎเชเชพเชฏเซเช เชเซ เชธเชฟเชธเซเชเชฎเซเชก เชฎเซเชกเชฎเชพเช เชฏเซเชเชธเชฌเซ เชธเชพเชฅเซ เชเซเช เชตเชฃเซ เชถเชเซเชฏ เชเซ, เชชเชฐเชเชคเซ เชซเชเซเชค เชฏเซเชเชธเชฌเซ เชกเชฟเชธเซเช เชชเชฐเชจเซ เชเซ เชธเชพเชฅเซ เชฆเชฐเซเช เชกเชฟเชธเซเชเชจเชพ เชฎเซเชจเซเชฏเซเช
เชฒ เชเซเชกเชพเชฃ เชธเชพเชฅเซ, เช
เชจเซ เชฏเซเชเชธเชฌเซ เชกเชฟเชธเซเช เชชเซเชคเซ เช เชคเซเชจเชพ เชฆเซเชตเชพเชฐเชพ เชธเชเชเชณเชพเชฏเซเชฒ เชนเซเช เชถเชเซ เชเซ. UUID, LABEL เชเชพเชฎ เชเชฐเชคเซเช เชจเชฅเซ. เชเชจเซ เชเชฐเซ เชเชพเชณเชตเชตเซเช เชเซเชฌ เช
เชจเซเชเซเชณ เชจ เชนเชคเซเช, เชคเซเชฅเซ เช
เชเชคเซ เชนเซเช เชฐเชพเชน เชเซเชตเชพเชฎเชพเช เชกเซเชฌเซ เชเชฏเซ เช
เชจเซ, เชฒเชเชญเช 7 เชตเชฐเซเชท เชฐเชพเชน เชเซเชฏเชพ เชชเชเซ, เชฎเชจเซ เชธเชฎเชเชพเชฏเซเช เชเซ เชเซเช เชธเชฎเชธเซเชฏเชพ เชนเชฒ เชเชฐเชถเซ เชจเชนเซเช.
เชธเชฎเชธเซเชฏเชพเช
เช เชฒเชฌเชคเซเชค, เชฒเชเชญเช เชเซเช เชชเชฃ เชตเซเชฏเชเซเชคเชฟ เชกเซเชฐเชพเชเช เชฎเชพเชเซ เชชเซเชคเชพเชจเซเช เชชเซเชฒเชเชเชจ เชฒเชเซ เชถเชเซ เชเซ, เชชเชฐเชเชคเซ เชคเซเชจเซ เชเชพเชฎ เชเชฐเชตเซเช เชนเชตเซ เชเชเชฒเซเช เชธเชฐเชณ เชจเชฅเซ. เชคเซ เชฌเชนเชพเชฐ เชเชตเซเชฏเซเช เชเซ เชเซ systemd เชธเซเชเชพเชฐเซเชเช เชชเชจเซ เชธเชฎเชพเชเชคเชฐ เชชเซเชฐเชเซเชคเชฟเชจเซ เชฒเซเชงเซ, เชคเชฎเชพเชฐเซ เชเซเชก เชถเชพเชฎเซเชฒ เชเชฐเชตเซ เช เชจเซ เชฒเซเชกเชฟเชเช เชชเซเชฐเชเชคเชฟเชฎเชพเช เชซเซเชฐเชซเชพเชฐ เชเชฐเชตเซ เชเชเชฒเซเช เชธเชฐเชณ เชจเชฅเซ. เชกเซเชฐเชพเชเช เชฎเชพเชเซเชจเชพ เชฆเชธเซเชคเชพเชตเซเชเซเช เชฌเชงเซเช เช เชธเชฎเชเชพเชตเซเชฏเซเช เชจเชฅเซ. เชเซ เชเซ, เชฒเชพเชเชฌเชพ เชชเซเชฐเชฏเซเชเซ เชชเชเซ, เชนเซเช เชธเชฎเชธเซเชฏเชพ เชนเชฒ เชเชฐเชตเชพเชฎเชพเช เชธเชเซเชทเชฎ เชนเชคเซ.
เชคเซ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซ เชเซ
เชคเซ เชคเซเชฐเชฃ เชเชเชฎเซ เชชเชฐ เชเชงเชพเชฐเชฟเชค เชเซ:
- luks-auto-key.service - LUKS เชฎเชพเชเซ เชเซเช เชธเชพเชฅเซ เชกเซเชฐเชพเชเชตเซ เชฎเชพเชเซ เชถเซเชงเซ เชเซ
- luks-auto.target - เชฌเชฟเชฒเซเช-เชเชจ systemd-cryptsetup เชเชเชฎเซ เชฎเชพเชเซ เชจเชฟเชฐเซเชญเชฐเชคเชพ เชคเชฐเซเชเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ
- luks-auto-clean.service - luks-auto-key.service เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเซเชฒ เชเชพเชฎเชเชฒเชพเช เชซเชพเชเชฒเซเชจเซ เชธเชพเชซ เชเชฐเซ เชเซ
เช เชจเซ luks-auto-generator.sh เช เชเช เชธเซเชเซเชฐเชฟเชชเซเช เชเซ เชเซ systemd เชฆเซเชตเชพเชฐเชพ เชถเชฐเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เช เชจเซ เชเชฐเซเชจเชฒ เชชเชฐเชฟเชฎเชพเชฃเซ เชชเชฐ เชเชงเชพเชฐเชฟเชค เชเชเชฎเซ เชเชจเชฐเซเช เชเชฐเซ เชเซ. เชธเชฎเชพเชจ เชเชจเชฐเซเชเชฐ fstab เชเชเชฎเซ เชตเชเซเชฐเซ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
luks-auto-generator.sh
drop-in.conf เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ, เชธเซเชเชพเชจเซเชกเชฐเซเชก systemd-cryptsetup เชจเซเช เชตเชฐเซเชคเชจ luks-auto.target เชจเซ เชคเซเชฎเชจเซ เชจเชฟเชฐเซเชญเชฐเชคเชพเชฎเชพเช เชเชฎเซเชฐเซเชจเซ เชฌเชฆเชฒเชพเชฏ เชเซ.
luks-auto-key.service เช เชจเซ luks-auto-key.sh
เช เชเชเชฎ luks-auto-key.sh เชธเซเชเซเชฐเชฟเชชเซเช เชเชฒเชพเชตเซ เชเซ, เชเซ, rd.luks.* เชเซเชจเชพ เชเชงเชพเชฐเซ, เชเซ เชธเชพเชฅเซ เชฎเซเชกเชฟเชฏเชพ เชถเซเชงเซ เชเซ เช เชจเซ เชตเชงเซ เชเชชเชฏเซเช เชฎเชพเชเซ เชคเซเชจเซ เชเชพเชฎเชเชฒเชพเช เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเช เชจเชเชฒ เชเชฐเซ เชเซ. เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชชเซเชฐเซเชฃ เชฅเชฏเชพ เชชเชเซ, luks-auto-clean.service เชฆเซเชตเชพเชฐเชพ เช เชธเซเชฅเชพเชฏเซ เชจเชฟเชฐเซเชฆเซเชถเชฟเชเชพเชฎเชพเชเชฅเซ เชเซเชจเซ เชเชพเชขเซ เชจเชพเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชธเซเชคเซเชฐเซเชคเซ:
/usr/lib/dracut/modules.d/99luks-auto/module-setup.sh
#!/bin/bash
check () {
if ! dracut_module_included "systemd"; then
"luks-auto needs systemd in the initramfs"
return 1
fi
return 255
}
depends () {
echo "systemd"
return 0
}
install () {
inst "$systemdutildir/systemd-cryptsetup"
inst_script "$moddir/luks-auto-generator.sh" "$systemdutildir/system-generators/luks-auto-generator.sh"
inst_script "$moddir/luks-auto-key.sh" "/etc/systemd/system/luks-auto-key.sh"
inst_script "$moddir/luks-auto.sh" "/etc/systemd/system/luks-auto.sh"
inst "$moddir/luks-auto.target" "${systemdsystemunitdir}/luks-auto.target"
inst "$moddir/luks-auto-key.service" "${systemdsystemunitdir}/luks-auto-key.service"
inst "$moddir/luks-auto-clean.service" "${systemdsystemunitdir}/luks-auto-clean.service"
ln_r "${systemdsystemunitdir}/luks-auto.target" "${systemdsystemunitdir}/initrd.target.wants/luks-auto.target"
ln_r "${systemdsystemunitdir}/luks-auto-key.service" "${systemdsystemunitdir}/initrd.target.wants/luks-auto-key.service"
ln_r "${systemdsystemunitdir}/luks-auto-clean.service" "${systemdsystemunitdir}/initrd.target.wants/luks-auto-clean.service"
}
/usr/lib/dracut/modules.d/99luks-auto/luks-auto-generator.sh
#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
. /lib/dracut-lib.sh
SYSTEMD_RUN='/run/systemd/system'
CRYPTSETUP='/usr/lib/systemd/systemd-cryptsetup'
TOUT=$(getargs rd.luks.key.tout)
if [ ! -z "$TOUT" ]; then
mkdir -p "${SYSTEMD_RUN}/luks-auto-key.service.d"
cat > "${SYSTEMD_RUN}/luks-auto-key.service.d/drop-in.conf" <<EOF
[Service]
Type=oneshot
ExecStartPre=/usr/bin/sleep $TOUT
EOF
fi
mkdir -p "$SYSTEMD_RUN/luks-auto.target.wants"
for argv in $(getargs rd.luks.uuid -d rd_LUKS_UUID); do
_UUID=${argv#luks-}
_UUID_ESC=$(systemd-escape -p $_UUID)
mkdir -p "${SYSTEMD_RUN}/systemd-cryptsetup@luksx2d${_UUID_ESC}.service.d"
cat > "${SYSTEMD_RUN}/systemd-cryptsetup@luksx2d${_UUID_ESC}.service.d/drop-in.conf" <<EOF
[Unit]
After=luks-auto.target
ConditionPathExists=!/dev/mapper/luks-${_UUID}
EOF
cat > "${SYSTEMD_RUN}/luks-auto@${_UUID_ESC}.service" <<EOF
[Unit]
Description=luks-auto Cryptography Setup for %I
DefaultDependencies=no
Conflicts=umount.target
IgnoreOnIsolate=true
Before=luks-auto.target
BindsTo=dev-disk-byx2duuid-${_UUID_ESC}.device
After=dev-disk-byx2duuid-${_UUID_ESC}.device luks-auto-key.service
Before=umount.target
[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/etc/systemd/system/luks-auto.sh ${_UUID}
ExecStop=$CRYPTSETUP detach 'luks-${_UUID}'
Environment=DRACUT_SYSTEMD=1
StandardInput=null
StandardOutput=syslog
StandardError=syslog+console
EOF
ln -fs ${SYSTEMD_RUN}/luks-auto@${_UUID_ESC}.service $SYSTEMD_RUN/luks-auto.target.wants/luks-auto@${_UUID_ESC}.service
done
/usr/lib/dracut/modules.d/99luks-auto/luks-auto-key.service
[Unit]
Description=LUKS AUTO key searcher
After=cryptsetup-pre.target
Before=luks-auto.target
DefaultDependencies=no
[Service]
Environment=DRACUT_SYSTEMD=1
Type=oneshot
ExecStartPre=/usr/bin/sleep 1
ExecStart=/etc/systemd/system/luks-auto-key.sh
RemainAfterExit=true
StandardInput=null
StandardOutput=syslog
StandardError=syslog+console
/usr/lib/dracut/modules.d/99luks-auto/luks-auto-key.sh
#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
export DRACUT_SYSTEMD=1
. /lib/dracut-lib.sh
MNT_B="/tmp/luks-auto"
ARG=$(getargs rd.luks.key)
IFS=$':' _t=(${ARG})
KEY=${_t[0]}
F_FIELD=''
F_VALUE=''
if [ ! -z $KEY ] && [ ! -z ${_t[1]} ];then
IFS=$'=' _t=(${_t[1]})
F_FIELD=${_t[0]}
F_VALUE=${_t[1]}
F_VALUE="${F_VALUE%"}"
F_VALUE="${F_VALUE#"}"
fi
mkdir -p $MNT_B
finding_luks_keys(){
local _DEVNAME=''
local _UUID=''
local _TYPE=''
local _LABEL=''
local _MNT=''
local _KEY="$1"
local _F_FIELD="$2"
local _F_VALUE="$3"
local _RET=0
blkid -s TYPE -s UUID -s LABEL -u filesystem | grep -v -E -e "TYPE=".*_member"" -e "TYPE="crypto_.*"" -e "TYPE="swap"" | while IFS=$'' read -r _line; do
IFS=$':' _t=($_line);
_DEVNAME=${_t[0]}
_UUID=''
_TYPE=''
_LABEL=''
_MNT=''
IFS=$' ' _t=(${_t[1]});
for _a in "${_t[@]}"; do
IFS=$'=' _v=(${_a});
temp="${_v[1]%"}"
temp="${temp#"}"
case ${_v[0]} in
'UUID')
_UUID=$temp
;;
'TYPE')
_TYPE=$temp
;;
'LABEL')
_LABEL=$temp
;;
esac
done
if [ ! -z "$_F_FIELD" ];then
case $_F_FIELD in
'UUID')
[ ! -z "$_F_VALUE" ] && [ "$_UUID" != "$_F_VALUE" ] && continue
;;
'LABEL')
[ ! -z "$_F_VALUE" ] && [ "$_LABEL" != "$_F_VALUE" ] && continue
;;
*)
[ "$_DEVNAME" != "$_F_FIELD" ] && continue
;;
esac
fi
_MNT=$(findmnt -n -o TARGET $_DEVNAME)
if [ -z "$_MNT" ]; then
_MNT=${MNT_B}/KEY-${_UUID}
mkdir -p "$_MNT" && mount -o ro "$_DEVNAME" "$_MNT"
_RET=$?
else
_RET=0
fi
if [ "${_RET}" -eq 0 ] && [ -f "${_MNT}/${_KEY}" ]; then
cp "${_MNT}/${_KEY}" "$MNT_B/${_UUID}.key"
info "Found ${_MNT}/${_KEY} on ${_UUID}"
fi
if [[ "${_MNT}" =~ "${MNT_B}" ]]; then
umount "$_MNT" && rm -rfd --one-file-system "$_MNT"
fi
done
return 0
}
finding_luks_keys $KEY $F_FIELD $F_VALUE
/usr/lib/dracut/modules.d/99luks-auto/luks-auto.target
[Unit]
Description=LUKS AUTO target
After=systemd-readahead-collect.service systemd-readahead-replay.service
After=cryptsetup-pre.target luks-auto-key.service
Before=cryptsetup.target
/usr/lib/dracut/modules.d/99luks-auto/luks-auto.sh
#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
export DRACUT_SYSTEMD=1
. /lib/dracut-lib.sh
MNT_B="/tmp/luks-auto"
CRYPTSETUP='/usr/lib/systemd/systemd-cryptsetup'
for i in $(ls -p $MNT_B | grep -v /);do
info "Trying $i on $1..."
$CRYPTSETUP attach "luks-$1" "/dev/disk/by-uuid/$1" $MNT_B/$i 'tries=1'
if [ "$?" -eq "0" ]; then
info "Found $i for $1"
exit 0
fi
done
warn "No key found for $1. Fallback to passphrase mode."
/usr/lib/dracut/modules.d/99luks-auto/luks-auto-clean.service
[Unit]
Description=LUKS AUTO key cleaner
After=cryptsetup.target
DefaultDependencies=no
[Service]
Type=oneshot
ExecStart=/usr/bin/rm -rfd --one-file-system /tmp/luks-auto
/etc/dracut.conf.d/luks-auto.conf
add_dracutmodules+=" luks-auto "
เชธเซเชฅเชพเชชเชจ
mkdir -p /usr/lib/dracut/modules.d/99luks-auto/
# ัะฐะทะผะตัะฐะตะผ ััั ะฟะพััะธ ะฒัะต ัะฐะนะปั
chmod +x /usr/lib/dracut/modules.d/99luks-auto/*.sh
# ัะพะทะดะฐะตะผ ัะฐะนะป /etc/dracut.conf.d/luks-auto.conf
# ะ ะณะตะฝะตัะธััะตะผ ะฝะพะฒัะน initramfs
dracut -f
เชจเชฟเชทเซเชเชฐเซเชท
เชธเชเชตเชก เชฎเชพเชเซ, เชฎเซเช sysvinit เชฎเซเชก เชฎเชพเชเซ เชเชฐเซเชจเชฒ เชเชฆเซเชถ เชตเชพเชเซเชฏ เชตเชฟเชเชฒเซเชชเซ เชธเชพเชฅเซ เชธเซเชธเชเชเชคเชคเชพ เชเชพเชณเชตเซ เชฐเชพเชเซ เชเซ, เชเซ เชเซเชจเชพ เชธเซเชฅเชพเชชเชจเซเชฎเชพเช เชตเชพเชชเชฐเชตเชพเชจเซเช เชธเชฐเชณ เชฌเชจเชพเชตเซ เชเซ.
เชธเซเชฐเซเชธ: www.habr.com