Tere kõigile.
Viimased artiklid Habré kohta
Kõigepealt otsustasin alla laadida Elbruse OS-i või õigemini ainult x86_64 arhitektuuri jaoks saadaoleva distributsiooni, vaadata, kuidas see töötab, ja proovida sellele installida Veeam Agent for Linux. Kui soovite teada, mis sellest välja tuli, vaadake kassi.
Nii et väike kõrvalepõige juhuks, kui keegi ei tea. "Elbrus" on selline
Veel üks väike sunnitud taganemine. Fakt on see, et kunagi tegelesin kodumaise tarkvaraga, nagu MSVS ja Baguette RTOS. Mul oli kodumaiste komponentidega töötamise kogemus, sealhulgas MCST protsessor. Seetõttu võin täie vastutustundega öelda, et selles valdkonnas on teatud spetsiifilisus ja püüan seda artiklis mitte puudutada. Kui ma tõesti tahan, panen sildi [TBD]. Seega proovime ilma otsese trollimise ja banaalse oigamiseta hakkama. Lõpuks tuleb mõista Venemaa kaitsetööstust ja valitsusasutusi. Suur riik – väike eelarve.. [TBD].
Null etapp - lae alla. Tähelepanuväärne on see, et uudis Elbruse OS-i kättesaadavaks tegemisest tekitas nii palju vastukaja, et leviserver läks alla. [TBD] Aitäh Yandexile ja insenerile, kes mõtles selle sinna kolida. Nii et allalaadimiskiirus on hea.
Esimene etapp - paigaldus. Paigaldasin selle esimesse hüperviisorisse, mis oli tasuta kasutamiseks saadaval. Eraldasin kaks tuuma, paar giga RAM-i, 32 MB video jaoks (seal tuleb graafiline liides, arvasin). Ketas on nagu tavaliselt - 32 GB.
Alustasin installimist. Ma ei kasutanud paigaldusjuhiseid, seega ei oska ma seda kommenteerida. TUI installiliides on tõsiselt minimalistlik.
Noh, suurepärane, saame ilma hiireta hakkama.
Järgmise aknaga sain hakkama teisel katsel. Miks mitte valida kettalt installimisel vaikeseade sr0 [TBD]?
Valige CD-ROM-i allikas ja liikuge edasi.
Ajavööndit valides mõistsin järsku, et süsteem kasutab alglaadimisprotsessi ja töötan TTY0-st.
OK, siis liigitagem "Elbrus" kogukonnaks
Ülejäänu on peaaegu ebaoluline: paneme kõik ja lepime kokku. Teel saame teada, et kernelit kasutatakse 3.14.79-13.84. Hmm, Debian 7-l oli 3.2 [TBD].
Järgmiseks valige ketta vaikepartitsioonid ja... Näeme hoiatust:
Hmm, millegipärast ei tulnud automaatne jaotus 32 GB kettaga hästi toime. Ma ei vahetanud ketast; täitsin ülesande käsitsi ketta partitsiooniga stiilis "kõik-ühes". Pidin installima ext3, kuna /boot ei saanud ext4-s olla.
Süsteem tekkis ilma vahejuhtumiteta.
Teine etapp - alternatiivide otsimine.
Pärast teise ketta sisus tuhnimist mõistsin, et see on hoidla, millel on lisa. pakendites. Ja vaadates faili /etc/apt/sources.list, sain aru, et see tuleb paigaldada kausta /mnt/cdrom. Kuid ma ei leidnud /etc/os-release. Kuid on olemas /etc/mcst-version sisuga 3.0-rc36. 3.0 on ilmselt versioon – tundub, et sobib, aga rc36? Üldiselt ei suuda kolmanda osapoole tarkvara seda levitamist klassikalisel viisil ära tunda.
Juursektsioonis hakkab silma kataloog /mcst ja sealt avastasin vajuva südamega /mcst/backup. See tähendab, et seal on varundustööriist ja see on süsteemi sisse ehitatud! "Tore," mõtlesin ma, "vaatame, kuidas see toimib!"
Selgus, et on olemas 4Kb bash skript /mcst/bin/backup, mis pakub failide kopeerimist. Vaikimisi - kataloogi /mcst/backup. Lähtekoodis eeldasin, et näen käsku rsync, kuid see pole vaikekonfiguratsioonis. Skript lihtsalt kopeerib failid. Käsk näeb välja umbes selline:
cp -rpdx <file backup> <file>
Kogu fail /mcst/bin/backup on siinHoiatan kohe, et sellest skriptist üksi ei piisa täielikuks mõistmiseks. See tõmbab funktsioone failist /mcst/bin/source, mis on midagi funktsioonide teegi sarnast. Ma ei lisanud seda (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
Kuigi võib-olla ma ei saanud millestki aru? Äkki keegi oskab kommentaarides selgitada: kuidas see skript tagab turvalise ja usaldusväärse andmete varundamise? [TBD]
rsync, muide, sisaldub lisandmoodulis. hoidlad. Versioon 3.1.3. Arvan, et rsynci kasutamine on siiski parem alternatiiv rakendusele /mcst/bin/backup.
Järgmiseks otsustasin uue panna Veeam Agent Linuxi jaoks. Keegi küsib: "Mis on Veeamil ja impordi asendamisel sellega pistmist?" Jah, seda ei ole registris, kuid see on FSTECi poolt sertifitseeritud, mis tähendab, et alternatiivide puudumisel saab seda kasutada. Kulutades viisteist minutit alternatiividele alates
Kolmas etapp — Veeam Agenti installimine Linuxile.
Niisiis koosneb Veeam Agent for Linux kahest paketist: veeamsnapi kerneli moodulist (muide,
Kerneli mooduli paigaldamisel oli üks väike probleem – puuduv pakett dkms. See on teenus, mis võimaldab luua allikast kerneli mooduleid. Reeglina on see saadaval kõigil deb-jaotustel. Pidin selle alla laadima kolmanda osapoole deb-hoidlast. Üks asi, mis mind rõõmustas, on see, et pakett ei sõltu arhitektuurist, nii et see sobib nagu omapärane. Miks seda saadaolevate pakettide loendisse ei lisatud või pigem ei välja töötatud [TBD]? Võib-olla eeldatakse, et keegi ei peaks ehitama ega käivitama mitte-MCST-tuumamooduleid. Siin on tõesti lahknevus – kuna seal on linuxi päised. See tähendab, et mooduli saab soovi korral käsitsi kokku panna ja masina käivitumisel skripti abil käivitada. Arvan, et te ei tohiks oodata MCST-lt [TBD] sagedasi värskendusi.
"OK, moodul on installitud - raskeim osa on möödas," arvasin ma... Veeam pakett deb-hoidla jaoks on amd64 platvormi jaoks ja Elbrus OS-il on x86_64 [TBD] platvorm. Erinevus on muidugi ainult nimes, kuid see erinevus muudab peaaegu kõik kolmanda osapoole deb-hoidlatest pärit paketid Elbruse OS-iga ühildumatuks. Selle tüütu arusaamatuse saab lihtsalt kõrvaldada: lihtsalt võtke pakett lahti, parandage teave arhitektuuri kohta ja pange see uuesti kokku. Kuidas seda teha
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Teine probleem on sõltuvused. Tundub, et vajalikud failid on olemas, aga pakette pole. Jäi mulje, et pakendite nimetused erinevad nende “imporditud analoogidest”. Võib-olla on raamatukogud erinevalt pakitud. Ma ei laskunud liiga palju üksikasjadesse, eemaldasin peaaegu kõik sõltuvused ja installimine läks edasi.
Seejärel ilmnesid probleemid teenuse alguskoodiga. Skript /lib/init/vars.sh puudus. Mingil põhjusel saab Elbrus ilma selleta hakkama, nii et eemaldame ka selle. Järgmisena pidime asendama sõnumiväljundi funktsiooni: puuduvad funktsioonid log_daemon_msg ja log_end_msg. Pärast failis /lib/lsb/init-functions tuhnimist leidsin funktsiooni log_success_msg – see on meile katsete jaoks kasulik. Muide, failis /lib/lsb/init-functions on rida “# Source SuSE`s rc functions” faili [TBD] alguses.
Pärast paketi sellist jämedat töötlemist failiga käivitati edukalt kogu masina varundamine NFS-i jagamisel. Ka varukinnitus õnnestus. Seega usun, et ilma kohustusteta “niisama” alla laaditud masina varundamiseks Elbrus PDK-ga sobib Veeam Agent Linuxile kindlasti. Isegi pärast kõiki failiga tehtud muudatusi.
Loomulikult ei toetata Elbruse OS-i levitamiskomplekti ametlikult, kuna see pole toetatud loendis. Lisaks ei testinud kvaliteedikontrolli osakond Veeam Agent for Linuxit selle peal, nii et need. toetus puudub (vähemalt artikli ilmumise ajal).
Loodan, et artikkel on kasulik neile, kes püüavad ellu viia 334. juuni 29.06.2017 korraldust nr XNUMX. Minu oma teile... [TBD].
Allikas: www.habr.com