Бүгдээрээ сайн байцгаана уу.
Хабрегийн сүүлийн үеийн нийтлэлүүд
Юуны өмнө би Elbrus үйлдлийн систем, эс тэгвээс зөвхөн x86_64 архитектурт ашиглах боломжтой түгээлтийг татаж авахаар шийдсэн бөгөөд энэ нь хэрхэн ажилладагийг харж, Linux-д зориулсан Veeam Agent-г суулгахыг оролдсон. Хэрэв та үүнээс юу гарсныг мэдэхийг хүсвэл муурыг үзээрэй.
Тиймээс, хэн нэгэн мэдэхгүй тохиолдолд жижиг ухралт. "Эльбрус" ийм л байдаг
Өөр нэг жижиг албадан ухрах. Би нэг удаа MSVS, Baguette RTOS гэх мэт дотоодын программ хангамжтай ажиллаж байсан явдал юм. Би MCST-ийн процессор зэрэг дотоодын эд ангиудтай ажиллаж байсан туршлагатай. Тиймээс би энэ чиглэлээр тодорхой онцлог шинж чанартай гэдгийг бүрэн хариуцлагатайгаар хэлж чадна, би нийтлэлдээ үүнийг хөндөхгүй байхыг хичээх болно. Би үнэхээр хүсч байвал [TBD] шошгыг тавина. Тиймээс бид шууд троллинг, улиг болсон ёолохгүйгээр хийхийг хичээх болно. Эцсийн дүндээ Оросын батлан хамгаалах үйлдвэр, төрийн байгууллагуудыг ойлгох хэрэгтэй. Том улс - жижиг төсөв.. [TBD].
Тэг шат - татаж авах. Elbrus OS-ийг ашиглах боломжтой болсон тухай мэдээ нь резонанс үүсгэж, түгээлтийн сервер унтарсан нь анхаарал татаж байна. [TBD] Yandex-д болон түүнийг тийш нь нүүлгэхээр бодсон инженердээ баярлалаа. Тиймээс татаж авах хурд сайн байна.
Эхний шат - суурилуулах. Би үүнийг үнэгүй ашиглах боломжтой анхны гипервизорт суулгасан. Би хоёр цөм, хэд хэдэн RAM, видеонд 32 МБ хуваарилсан (график интерфэйс байх болно гэж би бодсон). Диск нь ердийнх шиг - 32 ГБ.
Би суулгацыг эхлүүлсэн. Би суулгах зааврыг ашиглаагүй тул үүн дээр тайлбар өгөх боломжгүй. TUI суулгах интерфейс нь маш минималист юм.
За, гайхалтай, бид хулганагүйгээр хийж чадна.
Би хоёр дахь оролдлого дээр дараагийн цонхыг удирдаж чадсан. Дискнээс суулгахдаа өгөгдмөл төхөөрөмж sr0 [TBD]-г яагаад сонгож болохгүй гэж?
CD-ROM эх сурвалжийг сонгоод цааш үргэлжлүүлнэ үү.
Цагийн бүсийг сонгохдоо систем нь эхлүүлэх ачаалах процессыг ашигладаг болохыг би гэнэт ойлгосон бөгөөд би TTY0-аас ажиллаж байна.
За, "Эльбрус"-ыг нийгэмлэг гэж ангилъя
Үлдсэн хэсэг нь бараг чухал биш: бид бүгдийг тавьж, санал нийлдэг. Замдаа бид цөмийг 3.14.79-13.84 ашигладаг болохыг олж мэдэв. Хмм, Debian 7 нь 3.2 [TBD] байсан.
Дараа нь анхдагч дискний хуваалтыг сонгоод... Бид анхааруулга харна:
Хмм, ямар нэгэн байдлаар автомат хуваалт нь 32 гиг дискийг сайн даван туулсангүй. Би дискийг өөрчлөөгүй, би "бүгдийг нэг дор" хэв маягаар дискийг гараар хуваах даалгаврыг гүйцэтгэсэн. /boot нь ext3 дээр байх боломжгүй тул би ext4 суулгах шаардлагатай болсон.
Систем ямар ч асуудалгүйгээр гарч ирэв.
Хоёр дахь шат - өөр хувилбар хайх.
Хоёрдахь дискний агуулгыг гүйлгэсний дараа би энэ бол нэмэлт нөөцтэй хадгалах газар гэдгийг ойлгосон. багцуудад. Тэгээд /etc/apt/sources.list-ийг хараад би үүнийг /mnt/cdrom-д холбох хэрэгтэйг ойлгосон. Гэхдээ би /etc/os-release-г олсонгүй. Гэхдээ 3.0-rc36 агуулгатай /etc/mcst-version байна. 3.0 нь магадгүй хувилбар юм - энэ нь тохирох юм шиг санагдаж байна, гэхдээ rc36? Ерөнхийдөө гуравдагч талын програм хангамж нь энэ түгээлтийг сонгодог байдлаар таних боломжгүй байх магадлалтай.
Үндэс хуваалтаас /mcst лавлах миний анхаарлыг татсан бөгөөд би тэндээс /mcst/backup-ыг олсон. Өөрөөр хэлбэл, нөөцлөх хэрэгсэл байгаа бөгөөд үүнийг системд суулгасан болно! "Гайхалтай" гэж би бодлоо, "Энэ яаж ажилладгийг харцгаая!"
Файл хуулах боломжийг олгодог 4Kb bash скрипт /mcst/bin/backup байгаа нь тогтоогдсон. Анхдагчаар - /mcst/backup лавлах руу. Эх код дээр би rsync командыг харна гэж бодож байсан ч энэ нь анхдагч тохиргоонд байхгүй байна. Скрипт нь зүгээр л файлуудыг хуулдаг. Тушаал нь иймэрхүү харагдаж байна:
cp -rpdx <file backup> <file>
/mcst/bin/backup файл бүхэлдээ энд байнаЗөвхөн энэ скрипт нь бүрэн ойлгоход хангалтгүй гэдгийг би шууд анхааруулж байна. Энэ нь функцуудыг /mcst/bin/source-оос татдаг бөгөөд энэ нь функцуудын номын сан шиг зүйл юм. Би үүнийг оруулаагүй (44KB).
#!/bin/bash
unalias -a
set +vx
source $(dirname $0)/source
[[ $? != 0 ]] && exit 1
OPTIONS="hvcdrRil:L:"
usage()
{
echo "Usage: $PROG_NAME [-$OPTIONS] [backup]"
echo " h - this help"
echo " v vv vvv - verbose, very verbose, extremly verbose"
echo " c - create backup"
echo " d - diffs backup and system"
echo " r - recovery system"
echo " R - remove backup"
echo " i - prompt before backup removing"
echo " l list - additional backup files list"
echo " L list - global backup files list"
echo " backup - backup directory, default /mcst/backup/backup"
}
init_prog()
{
typeset flg=0
while getopts $OPTIONS opt
do
case $opt in
h ) usage; exit 0;;
v ) (( verbose = verbose + 1 )); set_verbose;;
c ) flg=1; c_flg=1;;
d ) flg=1; d_flg=1;;
r ) flg=1; r_flg=1;;
R ) flg=1; R_flg=1;;
i ) i_flg=1;;
l ) l_flg=1; list_arg="$list_arg $OPTARG";;
L ) L_flg=1; LIST_arg="$LIST_arg $OPTARG";;
* ) usage "Invalid option"; exit 1;;
esac
done
set_verbose
check_su
init_variables
shift $((OPTIND-1))
if (( $# > 1 ))
then
echo_fatal "invalid arguments number, exp 0|1, act $#"
exit 1
fi
[[ $# = 1 ]] && BACKUP=$1
echo "Backup directory is $BACKUP"
if [[ $L_flg = 1 ]]
then
backup_list="$LIST_arg"
elif [[ $c_flg != 1 && $R_flg != 1 ]]
then
get_output_cmd "cat $BACKUP/$BACKUP_LIST_NAME"
backup_list="$output_cmd"
else
get_output_cmd "get_backup_list"
backup_list="$output_cmd"
fi
if [[ $l_flg = 1 ]]
then
backup_list="$backup_list $list_arg"
fi
if [[ $flg = 0 ]]
then
if [[ -d $BACKUP ]]
then
ls -laR $BACKUP
else
echo_info "Cannot access $BACKUP"
fi
echo "backup_list=$backup_list"
exit 0
fi
### echo "Backup list: $backup_list"
}
create_file()
{
typeset f=$1 fr=$2
typeset fb
[[ -z $fr ]] && fr=$f
fb=${f#/}
fb=$BACKUP/$fb
xcmd="rm -rf $fb"
set_cmd "$xcmd"
run_cmd
xcmd="mkdir -p $fb"
set_cmd "$xcmd"
run_cmd
if [[ -a $fr ]]
then
xcmd="cp -rpdx $fr $fb/file"
set_cmd "$xcmd"
run_cmd
xcmd="touch $fb/create"
set_cmd "$xcmd"
run_cmd
else
xcmd="touch $fb/delete"
set_cmd "$xcmd"
run_cmd
fi
}
diff_file()
{
typeset f=$1
typeset fb
fb=${f#/}
fb=$BACKUP/$fb
if [[ -f $fb/delete ]]
then
echo_info "$f absent"
elif [[ -f $fb/create ]]
then
# echo "state: create $f"
if [[ ! -a $f ]]
then
echo_info "cannot access $f"
else
xcmd="diff -r $f $fb/file"
echo "$xcmd"
set_cmd "$xcmd" "" "0 1 2"
run_cmd
fi
else
echo_fatal "wrong $f backup"
exit 1
fi
}
recovery_file()
{
typeset f=$1
typeset fb
fb=${f#/}
fb=$BACKUP/$fb
if [[ ! -a $fb ]]
then
echo_fatal "cannot access $fb"
exit 1
fi
xcmd="rm -rf $f"
set_cmd "$xcmd"
run_cmd
if [[ -f $fb/delete ]]
then
:
elif [[ -f $fb/create ]]
then
xcmd="cp -rpdx $fb/file $f"
set_cmd "$xcmd"
run_cmd
else
echo_fatal "wrong $fb backup"
exit 1
fi
}
remove_backup()
{
echo "Remove backup"
if [[ ! -d $BACKUP ]]
then
echo_info "Cannot access $BACKUP"
return
fi
if [[ ! -f $BACKUP/$BACKUP_LIST_NAME ]]
then
echo_fatal "$BACKUP_LIST_NAME absent, remove backup manually"
exit 0
fi
answer=
if [[ $i_flg = 1 ]]
then
echo -n "Remove $BACKUP directory (yes/...)?"
read answer
else
answer=yes
fi
if [[ $answer = yes ]]
then
xcmd="rm -rf $BACKUP"
set_cmd "$xcmd"
run_cmd
fi
}
recovery_backup()
{
echo "Recovery system from $BACKUP"
for f in $backup_list
do
get_output_cmd "get_mount_point $f"
mnt=$output_cmd
get_output_cmd "is_ro_mounted $mnt"
mnt=$output_cmd
if [[ ! -z $mnt ]]
then
remount_rw_fs $mnt
fi
recovery_file $f
if [[ ! -z $mnt ]]
then
remount_ro_fs $mnt
fi
done
echo "The system is ready, reboot the system manually"
}
create_backup()
{
echo "Create backup"
xcmd="mkdir -pm0777 $BACKUP"
set_cmd "$xcmd"
run_cmd
for v in $backup_list
do
f=${v%%:*}
backup_list2="$backup_list2 $f"
fr=${v#*:}
create_file $f $fr
done
echo "$backup_list2" >$BACKUP/$BACKUP_LIST_NAME
}
diff_backup()
{
echo "Diffs system and backup"
if [[ ! -d $BACKUP ]]
then
echo_fatal "cannot access $BACKUP"
exit 1
fi
for f in $backup_list
do
diff_file $f
done
}
main()
{
typeset f mnt mnt_list answer
if [[ $R_flg = 1 ]]
then
remove_backup
fi
if [[ $r_flg = 1 ]]
then
recovery_backup
fi
if [[ $c_flg = 1 ]]
then
create_backup
fi
if [[ $d_flg = 1 ]]
then
diff_backup
fi
}
init_prog "$@"
main
exit 0
Гэсэн хэдий ч, магадгүй би ямар нэг зүйлийг ойлгохгүй байна уу? Магадгүй хэн нэгэн тайлбар дээр тайлбарлаж болох юм: энэ скрипт нь мэдээллийн аюулгүй, найдвартай нөөцлөлтийг хэрхэн баталгаажуулдаг вэ? [TBD]
Дашрамд хэлэхэд rsync нь нэмэлт хэрэгсэлд багтсан болно. агуулахууд. Хувилбар 3.1.3. Миний бодлоор rsync ашиглах нь /mcst/bin/backup програмаас илүү сайн хувилбар хэвээр байна.
Дараа нь би шинэ нэгийг тавихаар шийдсэн Linux-д зориулсан Veeam Agent. Хэн нэгэн: "Veeam болон импортыг орлох нь үүнтэй ямар холбоотой вэ?" гэж асуух болно. Тийм ээ, энэ нь бүртгэлд байхгүй, гэхдээ энэ нь FSTEC-ээр баталгаажсан бөгөөд энэ нь өөр хувилбар байхгүй тохиолдолд үүнийг ашиглаж болно гэсэн үг юм. -аас өөр хувилбаруудад арван таван минут зарцуулдаг
Гуравдугаар шат — Linux-д зориулсан Veeam Agent суулгах.
Тэгэхээр Linux-д зориулсан Veeam Agent нь хоёр багцаас бүрдэнэ: veeamsnap цөмийн модуль (дашрамд хэлэхэд,
Цөмийн модулийг суулгахад нэг жижиг асуудал гарсан - алга болсон dkms багц. Энэ нь эх сурвалжаас цөмийн модулиудыг бүтээх боломжийг олгодог үйлчилгээ юм. Дүрмээр бол энэ нь бүх debы хуваарилалт дээр байдаг. Би үүнийг гуравдагч этгээдийн дэб репозитороос татаж авах шаардлагатай болсон. Намайг баярлуулсан нэг зүйл бол багц нь архитектураас хамаардаггүй тул уугуул шиг тохирсон. Үүнийг яагаад боломжтой багцуудын жагсаалтад оруулаагүй, эс тэгвээс [TBD] боловсруулаагүй юм бэ? Магадгүй хэн ч MCST-ээс бусад цөмийн модулиудыг барьж, ажиллуулах ёсгүй гэж үздэг. Линукс-толгой байгаа тул энд үнэхээр зөрүү байна. Өөрөөр хэлбэл, хэрэв хүсвэл модулийг гараар угсарч, машин эхлэхэд скриптээр ажиллуулж болно. Та MCST [TBD]-ээс байнга шинэчлэлт хүлээж болохгүй гэж бодож байна.
“За, модуль суулгагдлаа – хамгийн хэцүү хэсэг нь дууслаа” гэж би бодлоо... Deb репозиторын veeam багц нь amd64 платформд зориулагдсан бөгөөд Elbrus OS нь x86_64 [TBD] платформтой. Мэдээжийн хэрэг, ялгаа нь зөвхөн нэр дээр байгаа боловч энэ ялгаа нь гуравдагч этгээдийн деби сангуудын бараг бүх багцыг Elbrus үйлдлийн системтэй нийцэхгүй болгодог. Энэхүү ядаргаатай үл ойлголцлыг зүгээр л арилгаж болно: зүгээр л багцыг задалж, архитектурын талаархи мэдээллийг засч, буцааж эвлүүлээрэй. Үүнийг хэрхэн хийх вэ
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Өөр нэг асуудал бол хамаарал юм. Шаардлагатай файлууд байгаа бололтой, гэхдээ багцууд нь байхгүй. Багцуудын нэр нь "импортын аналогиас" ялгаатай гэсэн сэтгэгдэл төрж байв. Магадгүй номын сангууд өөр өөрөөр багцлагдсан байх. Би хэт нарийн ширийн зүйлд ороогүй, бараг бүх хамаарлыг арилгаж, суулгацыг үргэлжлүүлэв.
Дараа нь үйлчилгээг эхлүүлэх кодтой холбоотой асуудал гарч ирэв. /lib/init/vars.sh скрипт дутуу байсан. Зарим шалтгааны улмаас Эльбрус үүнгүйгээр удирддаг тул бид үүнийг арилгах болно. Дараа нь бид мессежийн гаралтын функцийг солих шаардлагатай болсон: log_daemon_msg болон log_end_msg функцууд дутуу байсан. /lib/lsb/init-functions файлыг гүйлгэсний дараа би log_success_msg функцийг олсон - энэ нь туршилт хийхэд тохиромжтой байх болно. Дашрамд хэлэхэд, /lib/lsb/init-functions файлын "# Source SuSE`s rc functions" гэсэн мөр [TBD] файлын эхэнд байна.
Багцыг файлаар ийм бүдүүлэг боловсруулсны дараа NFS хувьцааны бүхэл бүтэн машины нөөцлөлтийг амжилттай эхлүүлсэн. Нөөц холбох ажил ч амжилттай болсон. Тиймээс ямар ч үүрэг хүлээлгүй "яг үүнтэй адил" татаж авсан Elbrus PDK-тэй машиныг нөөцлөхөд Linux-д зориулсан Veeam Agent тохиромжтой гэж би үзэж байна. Файл бүхий бүх өөрчлөлтийн дараа ч гэсэн.
Мэдээжийн хэрэг, Elbrus OS түгээлтийн хэрэгсэл нь дэмжигчдийн жагсаалтад ороогүй тул албан ёсоор дэмжигдээгүй. Нэмж дурдахад, Linux-д зориулсан Veeam Agent-ийг QA хэлтэс туршиж үзээгүй тул тэдгээр. ямар ч дэмжлэг байхгүй (наад зах нь нийтлэлийг нийтлэх үед).
334 оны 29.06.2017-р сарын XNUMX-ний өдрийн XNUMX тоот тушаалыг хэрэгжүүлэх гэж байгаа хүмүүст нийтлэл хэрэг болно гэж найдаж байна. Минийх чамд... [TBD].
Эх сурвалж: www.habr.com