Բարեւ բոլորին
Վերջին հոդվածները Habré-ի մասին
Նախ, ես որոշեցի ներբեռնել Elbrus OS-ը, ավելի ճիշտ՝ միայն հասանելի բաշխումը x86_64 ճարտարապետության համար, տեսնեմ, թե ինչպես է այն աշխատում, և փորձեցի դրա վրա տեղադրել Veeam Agent-ը Linux-ի համար։ Եթե ցանկանում եք իմանալ, թե ինչ է ստացվել դրանից, խնդրում եմ տեսեք կատվին:
Այսպիսով, մի փոքր շեղում, եթե ինչ-որ մեկը չգիտի: «Էլբրուսը» այդպիսին է
Եվս մեկ փոքրիկ հարկադիր նահանջ. Փաստն այն է, որ ես ժամանակին զբաղվել եմ հայրենական ծրագրերով, ինչպիսիք են MSVS-ը և Baguette RTOS-ը: Ես ունեի կենցաղային բաղադրիչների հետ աշխատելու փորձ, ներառյալ MCST-ի պրոցեսորը: Ուստի, ամենայն պատասխանատվությամբ կարող եմ ասել, որ այս ոլորտում կա որոշակի յուրահատկություն, և կփորձեմ հոդվածում չանդրադառնալ դրան։ Երբ ես իսկապես ցանկանամ, ես կդնեմ պիտակը [TBD]: Այսպիսով, մենք կփորձենք անել առանց բացահայտ տրոլինգի և սովորական հառաչանքի: Ի վերջո, պետք է հասկանալ ռուսական պաշտպանական արդյունաբերությունը և պետական կառույցները: Մեծ երկիր՝ փոքր բյուջե.. [TBD].
Զրոյական փուլ - ներբեռնել. Հատկանշական է, որ Elbrus OS-ի հասանելիության մասին լուրն այնքան ռեզոնանս առաջացրեց, որ բաշխման սերվերը խափանվեց։ [TBD] Շնորհակալություն Yandex-ին և ինժեներին, ով մտածում էր այն տեղափոխել այնտեղ: Այսպիսով, ներբեռնման արագությունը լավ է:
Առաջին փուլը - տեղադրում. Ես այն տեղադրեցի առաջին հիպերվիզորի վրա, որը հասանելի էր անվճար օգտագործման համար: Երկու միջուկ եմ հատկացրել, մի երկու գիգեր օպերատիվ հիշողություն, 32 մբ վիդեո (գրաֆիկական ինտերֆեյս կլինի, մտածեցի)։ Սկավառակը սովորականի պես է՝ 32 ԳԲ։
Ես սկսեցի տեղադրումը: Ես չեմ օգտագործել տեղադրման հրահանգները, ուստի չեմ կարող մեկնաբանել այն: TUI տեղադրման ինտերֆեյսը խիստ մինիմալիստական է:
Դե, հիանալի, մենք կարող ենք անել առանց մկնիկի:
Ես կարողացա հաջորդ պատուհանը երկրորդ փորձից: Ինչու՞ չընտրել լռելյայն սարքը sr0 [TBD] սկավառակից տեղադրելիս:
Ընտրեք CD-ROM-ի աղբյուրը և շարունակեք:
Ժամային գոտին ընտրելիս ես հանկարծ հասկացա, որ համակարգն օգտագործում է init boot գործընթացը, և ես աշխատում եմ TTY0-ից:
Լավ, ուրեմն եկեք «Էլբրուսը» դասակարգենք որպես համայնք
Մնացածը համարյա անկարևոր է՝ ամեն ինչ դնում ենք ու համաձայնում։ Ճանապարհին պարզում ենք, որ միջուկն օգտագործվում է 3.14.79-13.84: Հմմ, Debian 7-ն ուներ 3.2 [TBD]:
Հաջորդը, ընտրեք սկավառակի լռելյայն բաժանումը և... Մենք տեսնում ենք նախազգուշացում.
Հմմ, ինչ-որ կերպ ավտոմատ բաժանումը լավ չէր հաղթահարում 32 գիգացիոն սկավառակի հետ: Ես չեմ փոխել սկավառակը, ես ավարտեցի որոնումը «բոլորը մեկում» ոճով սկավառակի ձեռքով բաժանման միջոցով: Ես ստիպված էի տեղադրել ext3, քանի որ /boot-ը չէր կարող լինել ext4-ում:
Համակարգը գործարկվեց առանց միջադեպերի:
Երկրորդ փուլը - այլընտրանքների որոնում:
Երկրորդ սկավառակի բովանդակությունը փորփրելուց հետո ես հասկացա, որ սա լրացուցիչ շտեմարան է: փաթեթներում: Եվ նայելով /etc/apt/sources.list-ին, ես հասկացա, որ այն պետք է տեղադրվի /mnt/cdrom-ում: Բայց ես չգտա /etc/os-release: Բայց կա /etc/mcst-տարբերակ 3.0-rc36 բովանդակությամբ: 3.0-ը երևի տարբերակն է, կարծես տեղավորվում է, բայց rc36? Ընդհանուր առմամբ, երրորդ կողմի ծրագրակազմը, ամենայն հավանականությամբ, չի կարողանա ճանաչել այս բաշխումը դասական եղանակով:
Արմատային բաժանման մեջ /mcst գրացուցակը գրավում է իմ աչքը, և այնտեղ, խորտակվող սրտով, ես հայտնաբերեցի /mcst/backup-ը։ Այսինքն, կա պահեստային գործիք, և այն ներկառուցված է համակարգում: «Հրաշալի», մտածեցի ես, «Տեսնենք, թե ինչպես է դա աշխատում»:
Պարզվեց, որ կա 4Kb bash script /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 գործակալ Linux-ի համար. Ինչ-որ մեկը կհարցնի. «Ի՞նչ կապ ունի Veeam-ը և ներմուծման փոխարինումը»: Այո, գրանցամատյանում չկա, բայց այն վավերացված է FSTEC-ի կողմից, ինչը նշանակում է, որ այլընտրանքների բացակայության դեպքում այն կարող է օգտագործվել։ Տասնհինգ րոպե ծախսելով այլընտրանքների վրա
Երեք փուլ — Veeam Agent-ի տեղադրում Linux-ի համար:
Այսպիսով, Veeam Agent-ը Linux-ի համար բաղկացած է երկու փաթեթից՝ veeamsnap միջուկի մոդուլը (ի դեպ,
Մի փոքր խնդիր կար միջուկի մոդուլի տեղադրման հետ՝ բացակայող dkms փաթեթը: Սա ծառայություն է, որը թույլ է տալիս ստեղծել միջուկի մոդուլներ աղբյուրից: Որպես կանոն, այն հասանելի է բոլոր deb բաշխումների վրա: Ես ստիպված էի այն ներբեռնել երրորդ կողմի դեբային պահոցից: Մի բան, որ ինձ ուրախացրեց, այն է, որ փաթեթը կախված չէ ճարտարապետությունից, ուստի այն տեղավորվում է որպես հայրենի: Ինչո՞ւ այն ներառված չէր հասանելի փաթեթների ցանկում, ավելի ճիշտ՝ մշակված [TBD]: Թերևս ենթադրվում է, որ ոչ ոք չպետք է կառուցի և գործարկի ոչ MCST միջուկի մոդուլներ: Այստեղ իսկապես անհամապատասխանություն կա, քանի որ կան linux-headers: Այսինքն, մոդուլը, ցանկության դեպքում, կարող է հավաքվել ձեռքով և գործարկել սկրիպտի միջոցով, երբ մեքենան գործարկվի: Կարծում եմ, դուք չպետք է ակնկալեք հաճախակի թարմացումներ MCST [TBD]-ից:
«Լավ, մոդուլը տեղադրված է, ամենադժվարն ավարտված է», - մտածեցի ես... Deb պահեստի veeam փաթեթը նախատեսված է amd64 հարթակի համար, իսկ Elbrus OS-ն ունի x86_64 [TBD] հարթակ: Տարբերությունը, իհարկե, միայն անվան մեջ է, բայց այս տարբերությունը երրորդ կողմի դեբային պահեստներից գրեթե բոլոր փաթեթները անհամատեղելի է դարձնում Elbrus OS-ի հետ: Այս տհաճ թյուրիմացությունը կարելի է պարզապես վերացնել՝ պարզապես ապամոնտաժել փաթեթը, ուղղել ճարտարապետության մասին տեղեկատվությունը և նորից միացնել այն: Ինչպես դա անել
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-ը Linux-ի համար միանշանակ հարմար է: Նույնիսկ ֆայլի հետ կատարված բոլոր փոփոխություններից հետո:
Իհարկե, Elbrus OS բաշխման փաթեթը պաշտոնապես չի աջակցվում, քանի որ այն ներառված չէ աջակցվողների ցանկում: Բացի այդ, Veeam Agent-ը Linux-ի համար չի փորձարկվել դրա վրա QA բաժնի կողմից, ուստի դրանք. աջակցություն չկա (համենայն դեպս հոդվածի հրապարակման պահին):
Հուսով եմ հոդվածը օգտակար կլինի նրանց, ովքեր փորձում են իրականացնել 334 թվականի հունիսի 29.06.2017-ի թիվ XNUMX հրամանը։ Իմը քեզ... [TBD]:
Source: www.habr.com