سلام بر همه
مقالات اخیر در Habré
اول از همه تصمیم گرفتم سیستم عامل Elbrus یا بهتر است بگوییم فقط توزیع موجود برای معماری x86_64 را دانلود کنم، ببینم چگونه کار می کند و سعی کنم Veeam Agent برای لینوکس را روی آن نصب کنم. اگر می خواهید بدانید از این چه نتیجه ای حاصل شد، لطفا گربه را ببینید.
بنابراین، یک انحراف کوچک، در صورتی که کسی نداند. «البروس» هم همینطور است
یک عقب نشینی اجباری کوچک دیگر. واقعیت این است که من زمانی با نرم افزارهای داخلی مانند MSVS و Baguette RTOS سر و کار داشتم. من تجربه کار با قطعات داخلی، از جمله پردازنده MCST را داشتم. بنابراین، با مسئولیت کامل می توانم بگویم که در این زمینه یک ویژگی خاص وجود دارد و سعی می کنم در مقاله به آن اشاره نکنم. وقتی واقعاً بخواهم، برچسب [TBD] را می گذارم. بنابراین ما سعی خواهیم کرد بدون ترول کردن آشکار و ناله های پیش پا افتاده این کار را انجام دهیم. در پایان، صنعت دفاعی روسیه و سازمانهای دولتی باید درک شوند. کشور بزرگ - بودجه کوچک.. [TBD].
مرحله صفر - دانلود. قابل ذکر است که خبر در دسترس قرار گرفتن سیستم عامل البروس طنین انداز شد به طوری که سرور توزیع از کار افتاد. [TBD] با تشکر از Yandex و مهندس که به فکر انتقال آن به آنجا بود. بنابراین سرعت دانلود خوب است.
مرحله اول - نصب و راه اندازی. من آن را روی اولین هایپروایزر که برای استفاده رایگان در دسترس بود نصب کردم. من دو هسته، چند گیگ رم، 32 مگابایت برای ویدیو اختصاص دادم (فکر کردم یک رابط گرافیکی وجود خواهد داشت). دیسک طبق معمول است - 32 گیگابایت.
نصب رو شروع کردم من از دستورالعمل نصب استفاده نکردم، بنابراین نمی توانم در مورد آن نظر بدهم. رابط نصب TUI به شدت مینیمالیستی است.
خوب، عالی است، ما می توانیم بدون ماوس انجام دهیم.
من پنجره بعدی را در تلاش دوم مدیریت کردم. چرا هنگام نصب از دیسک، دستگاه پیشفرض sr0 [TBD] را انتخاب نمیکنید؟
منبع CD-ROM را انتخاب کرده و ادامه دهید.
هنگام انتخاب منطقه زمانی، ناگهان متوجه شدم که سیستم از فرآیند بوت اولیه استفاده می کند و من از TTY0 کار می کنم.
خوب، پس بیایید "البروس" را به عنوان یک جامعه طبقه بندی کنیم
بقیه تقریباً بی اهمیت است: ما همه چیز را قرار می دهیم و توافق می کنیم. در طول مسیر متوجه می شویم که هسته از 3.14.79-13.84 استفاده می شود. هوم، دبیان 7 3.2 [TBD] داشت.
در مرحله بعد پارتیشن بندی دیسک پیش فرض را انتخاب کنید و... یک اخطار می بینیم:
هوم، به نوعی پارتیشن بندی خودکار به خوبی با دیسک 32 گیگ کنار نمی آمد. من دیسک را تغییر ندادم؛ من تلاش را با پارتیشن بندی دستی دیسک به سبک "همه در یک" تکمیل کردم. من مجبور شدم ext3 را نصب کنم، زیرا /boot نمی تواند در ext4 باشد.
سیستم بدون هیچ حادثه ای بالا آمد.
در مرحله دوم - جستجو برای جایگزین
پس از جستجو در محتویات دیسک دوم، متوجه شدم که این یک مخزن با اضافی است. در بسته بندی ها و با نگاه کردن به /etc/apt/sources.list، متوجه شدم که باید در /mnt/cdrom نصب شود. اما /etc/os-release را پیدا نکردم. اما /etc/mcst-version با محتویات 3.0-rc36 وجود دارد. 3.0 احتمالا نسخه است - به نظر می رسد مناسب است، اما rc36؟ به طور کلی، نرم افزارهای شخص ثالث به احتمال زیاد نمی توانند این توزیع را به روش کلاسیک تشخیص دهند.
در پارتیشن ریشه، دایرکتوری mcst/ توجه من را به خود جلب می کند و در آنجا، با یک قلب در حال غرق، /mcst/backup را کشف کردم. یعنی یک ابزار پشتیبان وجود دارد و در سیستم تعبیه شده است! فکر کردم: «عالی، بیایید ببینیم چگونه کار میکند!»
مشخص شد که یک اسکریپت bash 4Kb /mcst/bin/backup وجود دارد که کپی فایل را فراهم می کند. به طور پیش فرض - به پوشه /mcst/backup. در کد منبع انتظار داشتم دستور rsync را ببینم، اما در پیکربندی پیش فرض نیست. اسکریپت به سادگی فایل ها را کپی می کند. دستور چیزی شبیه به این است:
cp -rpdx <file backup> <file>
کل فایل /mcst/bin/backup اینجاستمن بلافاصله به شما هشدار می دهم که این فیلمنامه به تنهایی برای درک کامل کافی نیست. توابع را از /mcst/bin/source می کشد، که چیزی شبیه به کتابخانه ای از توابع است. من آن را وارد نکردم (44 کیلوبایت).
#!/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 است.
بعد، تصمیم گرفتم یک مورد تازه بگذارم Veeam Agent برای لینوکس. یکی می پرسد: "ویم و جایگزینی واردات چه ربطی به آن دارد؟" بله، در رجیستر نیست، اما توسط FSTEC تایید شده است، به این معنی که در صورت عدم وجود جایگزین می توان از آن استفاده کرد. صرف پانزده دقیقه روی گزینه های جایگزین از
گام سوم - نصب Veeam Agent برای لینوکس.
بنابراین، Veeam Agent برای لینوکس از دو بسته تشکیل شده است: ماژول کرنل veeamsnap (به هر حال،
یک مشکل کوچک در نصب ماژول هسته وجود داشت - بسته dkms از دست رفته. این سرویسی است که به شما امکان می دهد ماژول های هسته را از منبع بسازید. به عنوان یک قاعده، در همه توزیع های deb در دسترس است. مجبور شدم آن را از یک مخزن deb شخص ثالث دانلود کنم. یکی از چیزهایی که من را خوشحال کرد این است که بسته به معماری بستگی ندارد، بنابراین مانند یک بومی مناسب است. چرا در لیست بسته های موجود گنجانده نشده است، یا بهتر است بگوییم، [TBD] توسعه نیافته است؟ شاید فرض بر این باشد که هیچ کس نباید هیچ ماژول هسته غیر MCST را بسازد و اجرا کند. در اینجا واقعاً یک اختلاف وجود دارد - زیرا هدرهای لینوکس وجود دارد. یعنی در صورت تمایل، ماژول را می توان با دست مونتاژ کرد و با راه اندازی دستگاه توسط یک اسکریپت راه اندازی کرد. من فکر می کنم نباید انتظار به روز رسانی های مکرر از MCST [TBD] داشته باشید.
من فکر کردم "خوب، ماژول نصب شده است - سخت ترین بخش به پایان رسیده است." تفاوت، البته، فقط در نام است، اما این تفاوت باعث میشود که تقریباً تمام بستههای موجود در مخازن deb شخص ثالث با سیستمعامل 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، دانلود شده "درست مثل آن" بدون هیچ تعهدی، Veeam Agent برای لینوکس قطعا مناسب است. حتی بعد از تمام تغییرات با یک فایل.
البته، کیت توزیع سیستم عامل Elbrus به طور رسمی پشتیبانی نمی شود، زیرا در لیست موارد پشتیبانی شده قرار ندارد. علاوه بر این، Veeam Agent برای لینوکس بر روی آن توسط بخش QA آزمایش نشده است، بنابراین آنها. هیچ پشتیبانی وجود ندارد (حداقل در زمان انتشار مقاله).
امیدوارم مقاله برای کسانی که در تلاش برای اجرای دستور شماره 334 مورخ 29.06.2017 خرداد XNUMX هستند مفید واقع شود. مال من به تو... [TBD].
منبع: www.habr.com