Здравейте на всички.
Последни статии в Habré
Първо, реших да изтегля Elbrus OS или по-скоро само наличната дистрибуция за архитектурата x86_64, да видя как работи и да се опитам да инсталирам Veeam Agent за Linux върху него. Ако искате да знаете какво излезе от това, моля, вижте cat.
И така, едно малко отклонение, ако някой не знае. "Елбрус" е такъв
Още едно малко принудително отстъпление. Факт е, че някога се занимавах с местен софтуер, като MSVS и Baguette RTOS. Имах опит в работата с домашни компоненти, включително процесор от MCST. Ето защо мога да кажа с пълна отговорност, че в тази област има определена специфика и ще се опитам да не я засягам в статията. Когато наистина искам, ще сложа етикета [TBD]. Така че ще се опитаме да се справим без откровено тролене и банално стенене. В крайна сметка трябва да се разбере руската отбранителна индустрия и държавни агенции. Голяма държава - малък бюджет.. [TBD].
Нулев етап - Изтегли. Трябва да се отбележи, че новината, че Elbrus OS е станала достъпна, предизвика резонанс до такава степен, че сървърът за разпространение падна. [TBD] Благодаря на Yandex и инженера, който се сети да го премести там. Така че скоростта на изтегляне е добра.
Първият етап - инсталация. Инсталирах го на първия хипервайзор, който беше достъпен за безплатно ползване. Разпределих две ядра, няколко гига RAM, 32 MB за видео (ще има графичен интерфейс, мислех си). Дискът е както обикновено - 32 GB.
Започнах инсталацията. Не съм използвал инструкциите за инсталиране, така че не мога да коментирам. Инсталационният интерфейс на TUI е силно минималистичен.
Е, страхотно, можем и без мишка.
Успях следващия прозорец от втория опит. Защо не изберете устройството по подразбиране sr0 [TBD] при инсталиране от диск?
Изберете CD-ROM източника и продължете напред.
Докато избирах часовата зона, внезапно разбрах, че системата използва процеса на стартиране на init, а аз работя от 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 скрипт /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
Въпреки че може би не разбрах нещо? Може би някой може да обясни в коментарите: как този скрипт гарантира безопасно и надеждно архивиране на данни? [ТБД]
rsync, между другото, е включен в добавката. хранилища. Версия 3.1.3. Мисля, че използването на rsync все още е по-добра алтернатива на приложението /mcst/bin/backup.
След това реших да сложа нов Veeam Agent за Linux. Някой ще попита: „Какво общо имат Veeam и заместването на вноса?“ Да, няма го в регистъра, но е сертифициран от FSTEC, което означава, че при липса на алтернатива може да се използва. Прекарване на петнадесет минути за алтернативи от
Трети етап — инсталиране на Veeam Agent за Linux.
И така, Veeam Agent за Linux се състои от два пакета: модула на ядрото veeamsnap (между другото,
Имаше един малък проблем с инсталирането на модула на ядрото - липсващият пакет dkms. Това е услуга, която ви позволява да изграждате модули на ядрото от източника. По правило той е наличен във всички deb дистрибуции. Трябваше да го изтегля от deb хранилище на трета страна. Едно нещо, което ме зарадва е, че пакетът не зависи от архитектурата, така че пасва като роден. Защо не беше включен в списъка с налични пакети или по-скоро не беше разработен [TBD]? Може би се предполага, че никой не трябва да изгражда и изпълнява модули на ядрото, които не са MCST. Тук наистина има несъответствие - тъй като има linux-headers. Тоест, модулът, ако желаете, може да бъде сглобен на ръка и стартиран от скрипт, когато машината стартира. Мисля, че не трябва да очаквате чести актуализации от MCST [TBD].
„Добре, модулът е инсталиран - най-трудната част свърши“, помислих си... Пакетът на veeam за хранилището на deb е за платформата amd64, а Elbrus OS има платформа x86_64 [TBD]. Разликата, разбира се, е само в името, но тази разлика прави почти всички пакети от deb хранилища на трети страни несъвместими с 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].
Източник: www.habr.com