Ahoj všichni
Nedávné články o Habrém
V první řadě jsem se rozhodl stáhnout si OS Elbrus, respektive pouze dostupnou distribuci pro architekturu x86_64, podívat se, jak funguje, a zkusit na ni nainstalovat Veeam Agent for Linux. Pokud chcete vědět, co z toho vzešlo, podívejte se na kočku.
Takže malá odbočka, kdyby někdo nevěděl. "Elbrus" je takový
Další malý nucený ústup. Faktem je, že jsem se kdysi zabýval domácím softwarem, jako je MSVS a Baguette RTOS. Měl jsem zkušenosti s prací s domácími komponenty včetně procesoru od MCST. Mohu tedy s plnou odpovědností říci, že určitá specifika v této oblasti existuje a pokusím se toho v článku nedotýkat. Když opravdu budu chtít, dám štítek [TBD]. Pokusíme se tedy obejít bez přímého trollingu a banálního naříkání. Nakonec je třeba pochopit ruský obranný průmysl a vládní agentury. Velká země – malý rozpočet.. [TBD].
Nultý stupeň - stažení. Je pozoruhodné, že zpráva o zpřístupnění operačního systému Elbrus vyvolala takovou rezonanci, že distribuční server spadl. [TBD] Díky Yandexu a inženýrovi, kterého napadlo to tam přesunout. Rychlost stahování je tedy dobrá.
První etapa - instalace. Nainstaloval jsem ho na první hypervizor, který byl k dispozici zdarma. Přidělil jsem dvě jádra, pár giga RAM, 32 MB pro video (bude tam grafické rozhraní, myslel jsem). Disk je jako obvykle - 32 GB.
Spustil jsem instalaci. Nepoužil jsem návod k instalaci, takže se k němu nemohu vyjádřit. Instalační rozhraní TUI je výrazně minimalistické.
No super, obejdeme se i bez myši.
Další okno se mi povedlo na druhý pokus. Proč nevybrat výchozí zařízení sr0 [TBD] při instalaci z disku?
Vyberte zdroj CD-ROM a pokračujte.
Při výběru časového pásma jsem si najednou uvědomil, že systém používá proces init boot a já pracuji z TTY0.
Dobře, pak klasifikujme „Elbrus“ jako komunitu
Zbytek je téměř nedůležitý: dáme všechno a souhlasíme. Cestou zjišťujeme, že se používá jádro 3.14.79-13.84. Hmm, Debian 7 měl 3.2 [TBD].
Dále vyberte výchozí rozdělení disku a... Zobrazí se varování:
Hmm, automatické dělení si nějak neporadilo s 32gigovým diskem. Disk jsem neměnil, úkol jsem dokončil ručním rozdělením disku ve stylu „vše v jednom“. Musel jsem nainstalovat ext3, protože /boot nemohl být v ext4.
Systém fungoval bez incidentů.
Druhá etapa - hledat alternativy.
Po prohrabání obsahu druhého disku jsem si uvědomil, že se jedná o úložiště s přídavnými. v balíčcích. A při pohledu na /etc/apt/sources.list jsem si uvědomil, že je třeba jej připojit do /mnt/cdrom. Ale nenašel jsem /etc/os-release. Existuje však /etc/mcst-version s obsahem 3.0-rc36. 3.0 je pravděpodobně verze - zdá se, že sedí, ale rc36? Obecně platí, že software třetích stran s největší pravděpodobností nebude schopen tuto distribuci klasickým způsobem rozpoznat.
V kořenovém oddílu mě zaujal adresář /mcst a tam jsem s potápějícím se srdcem objevil /mcst/backup. To znamená, že existuje nástroj pro zálohování a je zabudován do systému! "Skvělé," pomyslel jsem si, "podíváme se, jak to funguje!"
Ukázalo se, že existuje 4Kb bash skript /mcst/bin/backup, který zajišťuje kopírování souborů. Standardně - do adresáře /mcst/backup. Ve zdrojovém kódu jsem očekával, že uvidím příkaz rsync, ale není ve výchozí konfiguraci. Skript jednoduše zkopíruje soubory. Příkaz vypadá asi takto:
cp -rpdx <file backup> <file>
Celý soubor /mcst/bin/backup je zdeHned vás varuji, že tento skript sám o sobě k úplnému pochopení nestačí. Vytahuje funkce z /mcst/bin/source, což je něco jako knihovna funkcí. Nezahrnul jsem to (44 kB).
#!/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
I když, možná jsem něčemu nerozuměl? Možná někdo může v komentářích vysvětlit: jak tento skript zajišťuje bezpečné a spolehlivé zálohování dat? [TBD]
rsync, mimochodem, je součástí doplňku. úložišť. Verze 3.1.3. Myslím, že použití rsync je stále lepší alternativou k aplikaci /mcst/bin/backup.
Dále jsem se rozhodl dát nový Veeam Agent pro Linux. Někdo se zeptá: „Co s tím má společného Veeam a nahrazování importu?“ Ano, není v registru, ale je certifikován FSTEC, což znamená, že v případě neexistence alternativ může být použit. Strávit patnáct minut na alternativách od
Třetí fáze — instalace Veeam Agent pro Linux.
Veeam Agent pro Linux se tedy skládá ze dvou balíčků: modulu jádra veeamsnap (mimochodem,
Při instalaci modulu jádra se vyskytl jeden malý problém - chybějící balíček dkms. Toto je služba, která vám umožňuje sestavovat moduly jádra ze zdrojového kódu. Zpravidla je k dispozici na všech distribucích deb. Musel jsem to stáhnout z deb úložiště třetí strany. Jedna věc, která mě potěšila, je, že balíček nezávisí na architektuře, takže sedí jako nativní. Proč nebyl zahrnut do seznamu dostupných balíčků, nebo spíše nebyl vyvinut [TBD]? Možná se předpokládá, že by nikdo neměl stavět a spouštět žádné moduly jádra, které nejsou MCST. Zde skutečně existuje rozpor - protože existují linuxové hlavičky. To znamená, že modul, pokud je to požadováno, lze sestavit ručně a spustit pomocí skriptu při spuštění stroje. Myslím, že byste neměli očekávat časté aktualizace od MCST [TBD].
"OK, modul je nainstalován - nejtěžší část je za námi," pomyslel jsem si... Balíček veeam pro deb repository je pro platformu amd64 a Elbrus OS má platformu x86_64 [TBD]. Rozdíl je samozřejmě pouze v názvu, ale tento rozdíl způsobuje, že téměř všechny balíčky z deb repozitářů třetích stran jsou nekompatibilní s OS Elbrus. Toto nepříjemné nedorozumění lze jednoduše odstranit: stačí balíček rozebrat, opravit informace o architektuře a dát je zpět dohromady. Jak to udělat
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Dalším problémem jsou závislosti. Zdá se, že potřebné soubory tam jsou, ale balíčky nejsou. Vznikl dojem, že názvy balíčků se liší od jejich „importovaných analogů“. Možná jsou knihovny zabaleny jinak. Nezacházel jsem do přílišných podrobností, odstranil jsem téměř všechny závislosti a instalace pokračovala.
Pak se objevily problémy se startovacím kódem služby. Chyběl skript /lib/init/vars.sh. Z nějakého důvodu se Elbrus obejde bez něj, takže ho také odstraníme. Dále jsme museli nahradit funkci výstupu zpráv: chyběly funkce log_daemon_msg a log_end_msg. Po prohrabání se v souboru /lib/lsb/init-functions jsem našel funkci log_success_msg - bude se nám hodit na experimenty. Mimochodem, v souboru /lib/lsb/init-functions je řádek „# Source SuSE`s rc functions“ na začátku souboru [TBD].
Po takovém hrubém zpracování balíčku se souborem byla úspěšně spuštěna záloha celého stroje na sdílenou složku NFS. Záložní připojení bylo také úspěšné. Domnívám se tedy, že pro zálohování stroje pomocí Elbrus PDK, staženého „jen tak“ bez závazků, se Veeam Agent pro Linux rozhodně hodí. I po všech úpravách s pilníkem.
Distribuční sada Elbrus OS samozřejmě není formálně podporována, protože není zahrnuta v seznamu podporovaných. Veeam Agent pro Linux na něm navíc nebyl testován oddělením QA, takže ty. chybí podpora (alespoň v době zveřejnění článku).
Doufám, že článek bude užitečný těm, kteří se snaží realizovat příkaz č. 334 ze dne 29.06.2017. června XNUMX. Moje tobě... [TBD].
Zdroj: www.habr.com