Всем привет.
Хабре туралы соңғы мақалалар
Ең алдымен, мен Elbrus ОЖ жүктеп алуды шештім, дәлірек айтсақ, тек x86_64 архитектурасы үшін қолжетімді дистрибутивті, оның қалай жұмыс істейтінін көріп, оған Linux үшін Veeam Agent орнатуға тырысамын. Бұдан не шыққанын білгіңіз келсе, мысықты қараңыз.
Сонымен, егер біреу білмесе, кішкене шегініс. «Эльбрус» солай
Тағы бір шағын мәжбүрлі шегіну. Мен бір кездері MSVS және Baguette RTOS сияқты отандық бағдарламалық жасақтамамен айналыстым. Менің отандық компоненттермен, соның ішінде MCST процессорымен жұмыс істеу тәжірибем болды. Сондықтан бұл салада белгілі бір ерекшелік бар деп толық жауапкершілікпен айта аламын және оны мақалада қозғамауға тырысамын. Мен шынымен қаласам, [TBD] тегін қоямын. Сондықтан біз ашық троллингсіз және банальды ыңғайсыз әрекет етуге тырысамыз. Түптеп келгенде, Ресейдің қорғаныс өнеркәсібі мен мемлекеттік органдарын түсіну керек. Үлкен ел – шағын бюджет.. [TBD].
Нөлдік кезең - жүктеп алу. Бір қызығы, Elbrus ОЖ қолжетімді болды деген жаңалық резонанс тудырды, сондықтан тарату сервері істен шықты. [TBD] Яндекс пен оны сол жерге көшіруді ойлаған инженерге рахмет. Сондықтан жүктеу жылдамдығы жақсы.
бірінші кезең - орнату. Мен оны тегін пайдалануға болатын бірінші гипервизорға орнаттым. Мен екі ядроны, бірнеше гиг RAM, бейнеге 32 МБ бөлдім (графикалық интерфейс болады деп ойладым). Диск әдеттегідей - 32 ГБ.
Мен орнатуды бастадым. Мен орнату нұсқауларын пайдаланбадым, сондықтан оған түсініктеме бере алмаймын. TUI орнату интерфейсі өте минималистік.
Жақсы, біз тінтуірсіз жасай аламыз.
Мен екінші әрекетте келесі терезені басқардым. Неліктен дискіден орнату кезінде әдепкі sr0 [TBD] құрылғысын таңдамасқа?
CD-ROM көзін таңдап, жалғастырыңыз.
Уақыт белдеуін таңдаған кезде мен кенеттен жүйенің бастапқы жүктеу процесін қолданатынын түсіндім және мен TTY0-ден жұмыс істеп жатырмын.
Жарайды, онда «Эльбрусты» қауымдастық ретінде жіктейік
Қалғаны дерлік маңызды емес: біз бәрін қойып, келісеміз. Жолда біз ядроның 3.14.79-13.84 қолданылатынын білеміз. Хмм, Debian 7-де 3.2 [TBD] болды.
Содан кейін дискіні әдепкі бөлуді таңдаңыз және... Біз ескертуді көреміз:
Хмм, қалай болғанда да автоматты бөлу 32 гиг дискімен жақсы жұмыс істемеді. Мен дискіні өзгерткен жоқпын; «барлығы бір жерде» стилінде дискіні қолмен бөлу арқылы тапсырманы орындадым. Маған ext3 орнату керек болды, себебі /boot 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 агенті. Біреу: «Оған Veeam мен импортты алмастырудың қандай қатысы бар?» Деп сұрайды. Ия, ол тізілімде жоқ, бірақ ол FSTEC сертификатымен расталған, яғни балама болмаған жағдайда оны пайдалануға болады. -дан баламаларға он бес минут жұмсау
Үшінші кезең — Linux үшін Veeam Agent орнату.
Сонымен, Veeam Agent for Linux екі пакеттен тұрады: veeamsnap ядро модулі (айтпақшы,
Ядро модулін орнату кезінде бір кішкентай мәселе болды - жетіспейтін dkms бумасы. Бұл дереккөзден ядро модульдерін құруға мүмкіндік беретін қызмет. Әдетте, ол барлық deb дистрибуцияларында қол жетімді. Мен оны үшінші тараптың дебиторлық репозиторийінен жүктеп алуым керек болды. Мені қуантқан бір нәрсе, пакет сәулетке тәуелді емес, сондықтан ол туған жеріне ұқсайды. Неліктен ол қолжетімді пакеттер тізіміне енгізілмеген, дәлірек айтсақ, [TBD] әзірленбеген? Мүмкін, MCST емес ядро модульдерін ешкім құрастырмауы және іске қосуы қажет емес деп болжанады. Бұл жерде шын мәнінде сәйкессіздік бар - өйткені Linux-тақырыптары бар. Яғни, модуль, егер қажет болса, машина іске қосылған кезде қолмен жиналып, сценарий арқылы іске қосылуы мүмкін. Менің ойымша, сіз MCST [TBD] жиі жаңартуларын күтпеуіңіз керек.
«Жарайды, модуль орнатылды – ең қиын бөлігі аяқталды» деп ойладым... Deb репозиторийіне арналған veeam бумасы amd64 платформасына арналған, ал Elbrus ОЖ-да 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 функциялары» жолы [TBD] файлының басында орналасқан.
Буманы файлмен өрескел өңдеуден кейін NFS үлесіндегі бүкіл машинаның сақтық көшірмесі сәтті іске қосылды. Сақтық көшірме орнату да сәтті болды. Сонымен, ешқандай міндеттемесіз «дәл солай» жүктелген Elbrus PDK көмегімен машинаның сақтық көшірмесін жасау үшін Linux үшін Veeam Agent сөзсіз қолайлы деп есептеймін. Файлмен барлық өзгертулерден кейін де.
Әрине, Elbrus OS тарату жинағы ресми түрде қолдау көрсетпейді, өйткені ол қолдау көрсетілетіндер тізіміне кірмейді. Сонымен қатар, Linux-қа арналған Veeam Agent оны QA бөлімімен сынамаған, сондықтан олар. қолдау жоқ (кем дегенде мақала жарияланған кезде).
Мақала 334 жылғы 29.06.2017 маусымдағы NoXNUMX бұйрығын орындауға тырысатындарға пайдалы болады деп сенемін. Саған менікі... [TBD].
Ақпарат көзі: www.habr.com