Ciao.
Articoli recenti su Habré
Innanzitutto ho deciso di scaricare Elbrus OS, o meglio, solo la distribuzione disponibile per l'architettura x86_64, vedere come funziona e provare a installarci Veeam Agent for Linux. Se vuoi sapere cosa ne è venuto fuori, vedi cat.
Quindi, una piccola digressione, nel caso qualcuno non lo sapesse. "Elbrus" è così
Un'altra piccola ritirata forzata. Il fatto è che una volta mi occupavo di software domestico, come MSVS e Baguette RTOS. Ho avuto esperienza di lavoro con componenti domestici, incluso un processore MCST. Pertanto posso dire con piena responsabilità che esiste una certa specificità in questo ambito e cercherò di non toccarla nell'articolo. Quando lo desidero davvero, inserirò il tag [TBD]. Quindi proveremo a fare a meno del trolling totale e dei lamenti banali. Alla fine, è necessario comprendere l’industria della difesa e le agenzie governative russe. Grande paese - piccolo budget.. [TBD].
Stadio zero - scaricamento. È interessante notare che la notizia che il sistema operativo Elbrus è diventato disponibile ha suscitato risonanza, tanto che il server di distribuzione è andato in tilt. [TBD] Grazie a Yandex e all'ingegnere che hanno pensato di spostarlo lì. Quindi la velocità di download è buona.
La prima fase - installazione. L'ho installato sul primo hypervisor disponibile per l'uso gratuito. Ho assegnato due core, un paio di giga di RAM, 32 MB per il video (ci sarà un'interfaccia grafica, pensavo). Il disco è come al solito: 32 GB.
Ho iniziato l'installazione. Non ho usato le istruzioni di installazione, quindi non posso commentarlo. L'interfaccia di installazione TUI è fortemente minimalista.
Bene, fantastico, possiamo fare a meno del mouse.
Sono riuscito a visualizzare la finestra successiva al secondo tentativo. Perché non selezionare il dispositivo predefinito sr0 [TBD] durante l'installazione da disco?
Seleziona la sorgente CD-ROM e vai avanti.
Mentre selezionavo il fuso orario, mi sono improvvisamente reso conto che il sistema utilizza il processo di avvio init e sto lavorando da TTY0.
OK, allora classifichiamo “Elbrus” come comunità
Il resto è quasi senza importanza: mettiamo tutto e siamo d'accordo. Strada facendo, scopriamo che viene utilizzato il kernel 3.14.79-13.84. Hmm, Debian 7 aveva 3.2 [TBD].
Successivamente, seleziona il partizionamento del disco predefinito e... Viene visualizzato un avviso:
Hmm, per qualche motivo il partizionamento automatico non funzionava bene con un disco da 32 GB. Non ho cambiato il disco; ho completato la ricerca con il partizionamento manuale del disco in stile "all-in-one". Ho dovuto installare ext3, poiché /boot non poteva essere in ext4.
Il sistema è arrivato senza incidenti.
La seconda fase - cercare alternative.
Dopo aver frugato nel contenuto del secondo disco, mi sono reso conto che si tratta di un repository con funzionalità aggiuntive. nei pacchetti. E guardando /etc/apt/sources.list, mi sono reso conto che deve essere montato in /mnt/cdrom. Ma non ho trovato /etc/os-release. Ma esiste /etc/mcst-version con il contenuto 3.0-rc36. Probabilmente la versione è 3.0: sembra adatta, ma rc36? In generale, molto probabilmente il software di terze parti non sarà in grado di riconoscere questa distribuzione in modo classico.
Nella partizione root, la directory /mcst attira la mia attenzione e lì, con un tuffo al cuore, ho scoperto /mcst/backup. Cioè, esiste uno strumento di backup ed è integrato nel sistema! “Fantastico”, ho pensato, “vediamo come funziona!”
Si è scoperto che esiste uno script bash da 4Kb /mcst/bin/backup che fornisce la copia dei file. Per impostazione predefinita, nella directory /mcst/backup. Nel codice sorgente mi aspettavo di vedere il comando rsync, ma non è nella configurazione predefinita. Lo script copia semplicemente i file. Il comando è simile al seguente:
cp -rpdx <file backup> <file>
L'intero file /mcst/bin/backup è quiTi avverto subito che questa sceneggiatura da sola non è sufficiente per comprenderla appieno. Estrae funzioni da /mcst/bin/source, che è qualcosa come una libreria di funzioni. Non l'ho incluso (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
Anche se forse non ho capito qualcosa? Forse qualcuno può spiegare nei commenti: in che modo questo script garantisce un backup dei dati sicuro e affidabile? [Da definire]
rsync, tra l'altro, è incluso nel componente aggiuntivo. repository. Versione 3.1.3. Penso che usare rsync sia ancora un'alternativa migliore all'applicazione /mcst/bin/backup.
Successivamente, ho deciso di metterne uno nuovo Agente Veeam per Linux. Qualcuno si chiederà: “Cosa c’entrano Veeam e la sostituzione delle importazioni?” Sì, non è nel registro, ma è certificato FSTEC, il che significa che in assenza di alternative può essere utilizzato. Trascorrere quindici minuti su alternative da
Fase tre — installazione di Veeam Agent for Linux.
Quindi, Veeam Agent for Linux è composto da due pacchetti: il modulo kernel veeamsnap (a proposito,
Si è verificato un piccolo problema con l'installazione del modulo del kernel: il pacchetto dkms mancante. Questo è un servizio che ti consente di creare moduli del kernel dai sorgenti. Di norma, è disponibile su tutte le distribuzioni deb. Ho dovuto scaricarlo da un repository deb di terze parti. Una cosa che mi ha reso felice è che il pacchetto non dipende dall'architettura, quindi si adatta come se fosse nativo. Perché non è stato incluso nella lista dei pacchetti disponibili, o meglio, non è stato sviluppato [da definire]? Forse si presume che nessuno dovrebbe costruire ed eseguire moduli del kernel non MCST. C'è davvero una discrepanza qui, poiché ci sono gli header linux. Cioè, il modulo, se lo si desidera, può essere assemblato manualmente e avviato da uno script all'avvio della macchina. Penso che non dovresti aspettarti aggiornamenti frequenti da MCST [TBD].
"OK, il modulo è installato: la parte più difficile è passata", ho pensato... Il pacchetto veeam per il repository deb è per la piattaforma amd64 e il sistema operativo Elbrus ha una piattaforma x86_64 [TBD]. La differenza, ovviamente, è solo nel nome, ma questa differenza rende quasi tutti i pacchetti provenienti da repository deb di terze parti incompatibili con il sistema operativo Elbrus. Questo fastidioso malinteso può essere eliminato semplicemente: basta smontare il pacchetto, correggere le informazioni sull'architettura e rimontarlo. Come farlo
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Un altro problema sono le dipendenze. I file necessari sembrano essere lì, ma i pacchetti no. L'impressione era che i nomi dei pacchetti differissero dai loro "analoghi importati". Forse le librerie sono confezionate diversamente. Non sono entrato troppo nei dettagli, ho rimosso quasi tutte le dipendenze e l’installazione è andata avanti.
Poi sono emersi problemi con il codice di avvio del servizio. Mancava lo script /lib/init/vars.sh. Per qualche ragione, Elbrus riesce a farne a meno, quindi rimuoveremo anche quello. Successivamente, abbiamo dovuto sostituire la funzione di output del messaggio: mancavano le funzioni log_daemon_msg e log_end_msg. Dopo aver frugato nel file /lib/lsb/init-functions, ho trovato la funzione log_success_msg: ci sarà utile per gli esperimenti. A proposito, nel file /lib/lsb/init-functions la riga "# Source SuSE`s rcfunctions" si trova all'inizio del file [TBD].
Dopo un'elaborazione così approssimativa del pacchetto con un file, il backup dell'intera macchina sulla condivisione NFS è stato avviato con successo. Anche il montaggio del backup ha avuto esito positivo. Quindi, credo che per eseguire il backup di una macchina con Elbrus PDK, scaricato “così” senza alcun obbligo, Veeam Agent for Linux sia sicuramente adatto. Anche dopo tutte le modifiche con un file.
Naturalmente, il kit di distribuzione del sistema operativo Elbrus non è formalmente supportato, poiché non è incluso nell'elenco di quelli supportati. Inoltre, Veeam Agent for Linux non è stato testato dal reparto QA, quindi quelli. non c'è supporto (almeno al momento della pubblicazione dell'articolo).
Spero che l'articolo possa essere utile a coloro che stanno cercando di attuare l'ordinanza n. 334 del 29.06.2017 giugno XNUMX. Il mio per te... [TBD].
Fonte: habr.com