Üdvözlet mindenkinek.
Friss cikkek Habréról
Először is úgy döntöttem, hogy letöltöm az Elbrus operációs rendszert, vagy inkább csak az x86_64 architektúrához elérhető disztribúciót, megnézem, hogyan működik, és megpróbálom telepíteni rá a Veeam Agent for Linuxot. Ha tudni szeretné, mi sült ki ebből, kérjük, nézze meg a macskát.
Szóval egy kis kitérő, ha valaki nem tudná. Az "Elbrus" ilyen
Újabb kis kényszerű visszavonulás. Az tény, hogy valamikor hazai szoftverekkel foglalkoztam, mint például az MSVS és a Baguette RTOS. Volt tapasztalatom hazai alkatrészekkel, köztük egy MCST processzorral. Ezért teljes felelősséggel kijelenthetem, hogy van egy bizonyos sajátosság ezen a területen, és megpróbálom nem érinteni a cikkben. Amikor nagyon akarom, felteszem a [TBD] címkét. Tehát megpróbáljuk elkerülni a nyílt trollkodást és a banális nyögdécselést. Végül is meg kell érteni az orosz védelmi ipart és a kormányzati szerveket. Nagy ország – kis költségvetés.. [TBD].
Nulladik szakasz - Letöltés. Figyelemre méltó, hogy az Elbrus operációs rendszer elérhetővé válásának híre olyan visszhangot váltott ki, hogy a terjesztési szerver leállt. [TBD] Köszönet a Yandexnek és a mérnöknek, aki arra gondolt, hogy áthelyezi. Szóval jó a letöltési sebesség.
Az első szakasz - telepítés. Feltelepítettem az első ingyenesen használható hypervisorra. Kiosztottam két magot, pár giga RAM-ot, 32 MB-ot videóra (lesz grafikus felület, gondoltam). A lemez a szokásos módon - 32 GB.
Elkezdtem a telepítést. Nem használtam a telepítési útmutatót, így nem tudok róla nyilatkozni. A TUI telepítési felülete erősen minimalista.
Remek, megbírjuk egér nélkül is.
Második próbálkozásra sikerült a következő ablak. Miért nem az alapértelmezett sr0 [TBD] eszközt választja lemezről történő telepítéskor?
Válassza ki a CD-ROM forrást, és lépjen tovább.
Az időzóna kiválasztása közben hirtelen rájöttem, hogy a rendszer az init rendszerindítási folyamatot használja, és TTY0-ról dolgozom.
Rendben, akkor soroljuk be az „Elbrust” a közösségek közé
A többi szinte lényegtelen: mindent feltesszük és megegyezünk. Útközben megtudjuk, hogy a kernelt 3.14.79-13.84 használják. Hmm, a Debian 7-ben 3.2 [TBD] volt.
Ezután válassza ki az alapértelmezett lemezparticionálást, és... Figyelmeztetést látunk:
Hmm, az automatikus particionálás valahogy nem bírt jól egy 32 gigás lemezzel. Nem cseréltem le a lemezt; a küldetést kézi lemezparticionálással „mindent az egyben” stílusban teljesítettem. Az ext3-at kellett telepítenem, mivel a /boot nem lehetett az ext4-ben.
A rendszer incidens nélkül jött létre.
A második szakasz - alternatívák keresése.
Miután áttúrtam a második lemez tartalmát, rájöttem, hogy ez egy tárhely további kiegészítőkkel. csomagokban. És az /etc/apt/sources.list fájlt nézve rájöttem, hogy az /mnt/cdrom könyvtárba kell csatolni. De nem találtam /etc/os-release. De van az /etc/mcst-version 3.0-rc36 tartalommal. Valószínűleg a 3.0 a verzió – úgy tűnik, hogy megfelel, de az rc36? Általánosságban elmondható, hogy a harmadik féltől származó szoftverek valószínűleg nem fogják tudni felismerni ezt a terjesztést a klasszikus módon.
A gyökérpartícióban megakad a szemem a /mcst könyvtáron, és ott süllyedő szívvel fedeztem fel az /mcst/backup-ot. Vagyis van egy biztonsági mentési eszköz, és be van építve a rendszerbe! „Remek” – gondoltam –, lássuk, hogyan működik ez!
Kiderült, hogy létezik egy 4Kb-os bash script /mcst/bin/backup, amely fájlmásolást biztosít. Alapértelmezés szerint a /mcst/backup könyvtárba. A forráskódban az rsync parancsot vártam, de nem az alapértelmezett konfigurációban. A szkript egyszerűen másolja a fájlokat. A parancs valahogy így néz ki:
cp -rpdx <file backup> <file>
A teljes /mcst/bin/backup fájl itt találhatóAzonnal figyelmeztetem, hogy ez a forgatókönyv önmagában nem elég a teljes megértéshez. A függvényeket a /mcst/bin/source állományból vonja be, ami olyan, mint egy függvénykönyvtár. Nem tettem bele (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
Bár lehet, hogy nem értettem valamit? Esetleg valaki el tudja magyarázni a megjegyzésekben: hogyan biztosítja ez a szkript a biztonságos és megbízható adatmentést? [TBD]
Az rsync egyébként benne van a kiegészítőben. adattárak. 3.1.3 verzió. Szerintem az rsync használata még mindig jobb alternatíva a /mcst/bin/backup alkalmazással szemben.
Ezután úgy döntöttem, hogy teszek egy frisset Veeam Agent Linuxhoz. Valaki megkérdezi: "Mi köze van a Veeam-nek és az importhelyettesítésnek?" Igen, nincs benne a nyilvántartásban, de FSTEC tanúsítvánnyal rendelkezik, ami azt jelenti, hogy alternatívák hiányában használható. Tizenöt percet tölt az alternatívákra
Stage három — a Veeam Agent for Linux telepítése.
Tehát a Veeam Agent for Linux két csomagból áll: a veeamsnap kernel modulból (mellesleg,
Egy apró probléma volt a kernelmodul telepítésével – a hiányzó dkms csomag. Ez egy olyan szolgáltatás, amely lehetővé teszi a kernelmodulok forrásból történő felépítését. Általános szabály, hogy minden deb disztribúción elérhető. Le kellett töltenem egy harmadik fél deb repositoryjából. Egy dolog boldoggá tett, hogy a csomag nem függ az architektúrától, így illeszkedik, mint egy natív. Miért nem került fel az elérhető csomagok listájára, vagy inkább nem fejlesztették ki [TBD]? Talán azt feltételezik, hogy senkinek nem szabad nem MCST-kernelmodulokat készítenie és futtatnia. Valóban van itt eltérés – mivel vannak linux fejlécek. Vagyis a modult kívánság szerint kézzel is össze lehet rakni, és a gép indulásakor egy script segítségével elindítani. Szerintem ne számíts gyakori frissítésekre az MCST-től [TBD].
„Rendben, a modul telepítve van – a legnehezebb része véget ért” – gondoltam... A deb repository-hoz tartozó veeam csomag amd64 platformra való, az Elbrus operációs rendszer pedig x86_64 [TBD] platformmal rendelkezik. A különbség természetesen csak a névben rejlik, de ez a különbség szinte az összes, harmadik féltől származó deb repository-ból származó csomagot nem kompatibilis az Elbrus operációs rendszerrel. Ez a bosszantó félreértés egyszerűen kiküszöbölhető: csak szét kell szedni a csomagot, kijavítani az architektúrára vonatkozó információkat, majd összerakni. Hogyan kell csinálni
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Egy másik probléma a függőségek. Úgy tűnik, hogy a szükséges fájlok megvannak, de a csomagok nincsenek. Az volt a benyomás, hogy a csomagok neve eltér az „importált analógjaiktól”. Lehet, hogy a könyvtárak másképp vannak csomagolva. Nem mentem bele a részletekbe, szinte minden függőséget eltávolítottam, és ment a telepítés.
Ezután problémák merültek fel a szolgáltatás indítókódjával. A /lib/init/vars.sh szkript hiányzott. Valamiért az Elbrus nélküle is elboldogul, ezért azt is eltávolítjuk. Ezután le kellett cserélnünk az üzenetkimeneti függvényt: a log_daemon_msg és a log_end_msg függvények hiányoztak. A /lib/lsb/init-functions fájlban való turkálás után megtaláltam a log_success_msg függvényt - ez jó lesz nekünk a kísérletekhez. Egyébként a /lib/lsb/init-functions fájlban a „# Source SuSE`s rc functions” sor a [TBD] fájl elején található.
A csomag ilyen durva feldolgozása után egy fájllal sikeresen elindult a teljes gépre vonatkozó biztonsági mentés az NFS-megosztáson. A tartalék rögzítés is sikeres volt. Úgy gondolom tehát, hogy egy gép biztonsági mentésére az Elbrus PDK-val, amelyet „csak úgy” töltöttek le minden kötelezettség nélkül, a Veeam Agent for Linux mindenképpen alkalmas. Még az összes fájllal végzett módosítás után is.
Természetesen az Elbrus OS disztribúciós készlet formálisan nem támogatott, mivel nem szerepel a támogatottak listáján. Ráadásul a Veeam Agent for Linuxot nem tesztelte rajta a minőségbiztosítási osztály, így azok. nincs támogatás (legalábbis a cikk megjelenésekor).
Remélem, hogy a cikk hasznos lesz azoknak, akik megpróbálják végrehajtani a 334. június 29.06.2017-i XNUMX-es rendeletet. Az enyém neked... [TBD].
Forrás: will.com