Баарына салам.
Habré боюнча акыркы макалалар
Биринчиден, мен Elbrus OSти, тагыраак айтканда, x86_64 архитектурасы үчүн жеткиликтүү дистрибуцияны гана жүктөп алууну чечтим, анын кантип иштээрин көрүп, Linux үчүн Veeam Agentти орнотуп көрүүнү чечтим. Мындан эмне чыкканын билгиңиз келсе, мышыкка кайрылыңыз.
Ошентип, кимдир бирөө билбесе, кичине чегинүү. "Эльбрус" ушундай
Дагы бир кичинекей аргасыз чегинүү. Чындыгында, мен бир жолу MSVS жана Baguette RTOS сыяктуу ата мекендик программалык камсыздоо менен алектенгем. Менде ата мекендик компоненттер, анын ичинде MCST компаниясынын процессору менен иштөө тажрыйбасы бар болчу. Ошондуктан бул жаатта белгилуу бир специфика-лык бар деп толук жоопкерчилик менен айта алам жана макалада ага тийбе-генге аракет кылам. Мен чындап кааласам, [TBD] тэгин коём. Андыктан биз ачыктан-ачык троллингсиз жана баналдык онтобой жасаганга аракет кылабыз. Акыр-аягы, Россиянын коргонуу өнөр жайын жана мамлекеттик органдарын түшүнүү керек. Чоң өлкө, кичинекей бюджет... [ТБД].
Нөл этап - жүктөө. Белгилей кетчү нерсе, Elbrus OS жеткиликтүү болуп калды деген кабар резонанс жаратты, ошондуктан бөлүштүрүү сервери иштебей калды. [TBD] Яндекске жана аны ошол жакка жылдырууну ойлогон инженерге рахмат. Ошентип, жүктөө ылдамдыгы жакшы.
биринчи этап - орнотуу. Мен аны бекер колдонууга жеткиликтүү болгон биринчи гипервизорго орноттум. Мен эки ядрону, бир нече гиг оперативдик эстутумду, видео үчүн 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ти таптым. Башкача айтканда, резервдик курал бар жана ал системага орнотулган! "Сонун," деп ойлодум мен, "Келгиле, бул кандай иштээрин көрөлү!"
Файлды көчүрүүнү камсыз кылган 4Кб баш скрипти /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 агентин орнотуу.
Ошентип, Linux үчүн Veeam Agent эки пакеттен турат: veeamsnap ядро модулу (айтмакчы,
Ядро модулун орнотууда бир кичинекей көйгөй бар - жок dkms пакети. Бул булактан ядро модулдарын курууга мүмкүндүк берген кызмат. Эреже катары, ал бардык деби бөлүштүрүүдө жеткиликтүү. Мен аны үчүнчү жактын деби репозиторийинен жүктөп алышым керек болчу. Мени кубандырган бир нерсе, пакет архитектурага көз каранды эмес, андыктан ал жергиликтүүдөй туура келет. Эмне үчүн ал жеткиликтүү пакеттердин тизмесине киргизилген эмес, тагыраак айтканда, [TBD] иштелип чыккан эмес? Балким, эч ким MCST эмес ядро модулдарын куруп, иштетпеши керек деп болжолдонууда. Бул жерде чындап эле карама-каршылык бар - анткени Linux-башаттар бар. Башкача айтканда, модулду, эгер кааласа, кол менен чогултуп, машина иштей баштаганда скрипт менен ишке киргизсе болот. Менимче, сиз MCSTден [TBD] тез-тез жаңыртууларды күтпөшүңүз керек.
“Макул, модуль орнотулду – эң кыйын бөлүгү бүттү” деп ойлогом... Deb репозиторийинин veeam пакети amd64 платформасы үчүн, ал эми Elbrus ОЖде 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 менен машинанын камдык көчүрмөсүн сактоо үчүн, эч кандай милдеттенмесиз "ошондой эле" жүктөлүп алынган Linux үчүн Veeam Agent сөзсүз ылайыктуу. Файл менен бардык өзгөртүүлөрдөн кийин да.
Албетте, Elbrus OS бөлүштүрүү комплекти расмий түрдө колдоого алынбайт, анткени ал колдоого алынгандардын тизмесине кирбейт. Кошумчалай кетсек, Linux үчүн Veeam Agent аны QA бөлүмү сынаган эмес, ошондуктан алар. эч кандай колдоо жок (жок дегенде макала жарыяланган учурда).
Макала 334-жылдын 29.06.2017-июнундагы No XNUMX буйругун ишке ашырууга аракет кылгандар үчүн пайдалуу болот деп ишенем. Меники сага... [TBD].
Source: www.habr.com