Hei alle sammen.
Nylige artikler om Habré
Først av alt bestemte jeg meg for å laste ned Elbrus OS, eller rettere sagt, bare den tilgjengelige distribusjonen for x86_64-arkitekturen, se hvordan den fungerer og prøve å installere Veeam Agent for Linux på den. Hvis du vil vite hva som kom ut av dette, se katt.
Så, en liten digresjon, i tilfelle noen ikke vet det. «Elbrus» er sånn
Nok en liten tvungen retrett. Faktum er at jeg en gang jobbet med innenlandsk programvare, som MSVS og Baguette RTOS. Jeg hadde erfaring med å jobbe med husholdningskomponenter, inkludert en prosessor fra MCST. Derfor kan jeg med fullt ansvar si at det er en viss spesifisitet på dette området, og jeg vil prøve å ikke berøre det i artikkelen. Når jeg virkelig vil, setter jeg taggen [TBD]. Så vi skal prøve å klare oss uten direkte trolling og banal stønn. Til slutt må den russiske forsvarsindustrien og offentlige etater bli forstått. Stort land - lite budsjett. [TBD].
Null trinn - nedlasting. Det er bemerkelsesverdig at nyheten om at Elbrus OS har blitt tilgjengelig forårsaket resonans, så mye at distribusjonsserveren gikk ned. [TBD] Takk til Yandex og ingeniøren som tenkte på å flytte den dit. Så nedlastingshastigheten er god.
Den første fasen - installasjon. Jeg installerte den på den første hypervisoren som var tilgjengelig for gratis bruk. Jeg tildelte to kjerner, et par spillejobber RAM, 32 MB for video (det blir et grafisk grensesnitt, trodde jeg). Disken er som vanlig - 32 GB.
Jeg startet installasjonen. Jeg brukte ikke installasjonsveiledningen, så jeg kan ikke kommentere den. TUI-installasjonsgrensesnittet er svært minimalistisk.
Vel, flott, vi klarer oss uten mus.
Jeg klarte neste vindu på andre forsøk. Hvorfor ikke velge standardenheten sr0 [TBD] når du installerer fra disk?
Velg CD-ROM-kilden og gå videre.
Mens jeg valgte tidssonen, innså jeg plutselig at systemet bruker init-oppstartsprosessen, og jeg jobber fra TTY0.
OK, la oss klassifisere "Elbrus" som et fellesskap
Resten er nesten uviktig: vi legger alt og er enige. Underveis finner vi ut at kjernen er brukt 3.14.79-13.84. Hmm, Debian 7 hadde 3.2 [TBD].
Deretter velger du standard diskpartisjonering og... Vi ser en advarsel:
Hmm, på en eller annen måte taklet den automatiske partisjoneringen ikke bra med en 32 gig-disk. Jeg endret ikke disken; jeg fullførte oppdraget med manuell diskpartisjonering i "alt-i-ett"-stilen. Jeg måtte installere ext3, siden /boot ikke kunne være i ext4.
Systemet kom opp uten hendelser.
Den andre fasen - søk etter alternativer.
Etter å ha rotet gjennom innholdet på den andre disken, innså jeg at dette er et depot med ekstra. i pakker. Og ser på /etc/apt/sources.list, innså jeg at den må monteres i /mnt/cdrom. Men jeg fant ikke /etc/os-release. Men det er /etc/mcst-versjon med innholdet 3.0-rc36. 3.0 er nok versjonen - den ser ut til å passe, men rc36? Generelt vil tredjepartsprogramvare mest sannsynlig ikke kunne gjenkjenne denne distribusjonen på klassisk måte.
I rotpartisjonen fanger /mcst-katalogen meg, og der, med et synkende hjerte, oppdaget jeg /mcst/backup. Det vil si at det er et sikkerhetskopieringsverktøy, og det er innebygd i systemet! "Flott," tenkte jeg, "la oss se hvordan dette fungerer!"
Det viste seg at det er et 4Kb bash-skript /mcst/bin/backup som gir filkopiering. Som standard - til /mcst/backup-katalogen. I kildekoden forventet jeg å se rsync-kommandoen, men den er ikke i standardkonfigurasjonen. Skriptet kopierer ganske enkelt filer. Kommandoen ser omtrent slik ut:
cp -rpdx <file backup> <file>
Hele filen /mcst/bin/backup er herJeg advarer deg med en gang om at dette manuset alene ikke er nok til å forstå fullt ut. Den henter funksjoner fra /mcst/bin/source, som er noe sånt som et funksjonsbibliotek. Jeg tok ikke med det (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
Selv om jeg kanskje ikke forsto noe? Kanskje noen kan forklare i kommentarene: hvordan sikrer dette skriptet sikker og pålitelig sikkerhetskopiering av data? [TBD]
rsync er forresten inkludert i tillegget. depoter. Versjon 3.1.3. Jeg tror at bruk av rsync fortsatt er et bedre alternativ til /mcst/bin/backup-applikasjonen.
Deretter bestemte jeg meg for å sette en ny Veeam Agent for Linux. Noen vil spørre: "Hva har Veeam og importsubstitusjon å gjøre med det?" Ja, det er ikke i registeret, men det er sertifisert av FSTEC, noe som betyr at det i mangel av alternativer kan brukes. Bruker femten minutter på alternativer fra
Stage tre — installasjon av Veeam Agent for Linux.
Så, Veeam Agent for Linux består av to pakker: veeamsnap-kjernemodulen (forresten,
Det var ett lite problem med å installere kjernemodulen - den manglende dkms-pakken. Dette er en tjeneste som lar deg bygge kjernemoduler fra kilden. Som regel er den tilgjengelig på alle deb-distribusjoner. Jeg måtte laste den ned fra et tredjeparts deb-lager. En ting som gjorde meg glad er at pakken ikke er avhengig av arkitekturen, så den passer som en innfødt. Hvorfor ble den ikke inkludert i listen over tilgjengelige pakker, eller rettere sagt, ikke utviklet [TBD]? Kanskje det antas at ingen skal bygge og kjøre noen ikke-MCST-kjernemoduler. Det er virkelig et avvik her - siden det er linux-headere. Det vil si at modulen, om ønskelig, kan settes sammen for hånd og startes av et script når maskinen starter. Jeg tror du ikke bør forvente hyppige oppdateringer fra MCST [TBD].
"OK, modulen er installert - den vanskeligste delen er over," tenkte jeg... Veeam-pakken for deb-lageret er for amd64-plattformen, og Elbrus OS har en x86_64 [TBD]-plattform. Forskjellen er selvfølgelig bare i navnet, men denne forskjellen gjør nesten alle pakker fra tredjeparts deb-repositories inkompatible med Elbrus OS. Denne irriterende misforståelsen kan enkelt elimineres: bare demonter pakken, korriger informasjonen om arkitekturen og sett den sammen igjen. Hvordan gjøre det
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Et annet problem er avhengigheter. De nødvendige filene ser ut til å være der, men pakkene er ikke det. Inntrykket var at navnene på pakkene skilte seg fra deres "importerte analoger". Kanskje er bibliotekene pakket annerledes. Jeg gikk ikke inn for mye detaljer, fjernet nesten alle avhengighetene, og installasjonen gikk videre.
Så dukket det opp problemer med tjenestestartkoden. Skriptet /lib/init/vars.sh manglet. Av en eller annen grunn klarer Elbrus seg uten den, så vi fjerner den også. Deretter måtte vi erstatte meldingsutdatafunksjonen: log_daemon_msg og log_end_msg funksjonene manglet. Etter å ha rotet rundt i filen /lib/lsb/init-functions, fant jeg log_success_msg-funksjonen - den vil være bra for oss for eksperimenter. Forresten, i filen /lib/lsb/init-functions er linjen "# Source SuSE`s rc functions" i begynnelsen av [TBD]-filen.
Etter en så grov behandling av pakken med en fil, ble sikkerhetskopieringen av hele maskinen på NFS-andelen vellykket lansert. Backup-monteringen var også vellykket. Så jeg tror at for å sikkerhetskopiere en maskin med Elbrus PDK, lastet ned "akkurat sånn" uten noen forpliktelser, er Veeam Agent for Linux definitivt egnet. Selv etter alle endringene med en fil.
Elbrus OS-distribusjonssettet støttes selvfølgelig ikke formelt, siden det ikke er inkludert i listen over støttede. I tillegg ble ikke Veeam Agent for Linux testet på den av QA-avdelingen, så de. det er ingen støtte (i hvert fall på tidspunktet for publisering av artikkelen).
Jeg håper artikkelen vil være nyttig for de som prøver å implementere ordre nr. 334 av 29.06.2017. juni XNUMX. Min til deg... [TBD].
Kilde: www.habr.com