Bonjour.
Articles récents sur Habré
Tout d'abord, j'ai décidé de télécharger le système d'exploitation Elbrus, ou plutôt uniquement la distribution disponible pour l'architecture x86_64, de voir comment cela fonctionne et d'essayer d'y installer Veeam Agent pour Linux. Si vous voulez savoir ce qui en est ressorti, veuillez consulter le chat.
Alors, une petite digression, au cas où quelqu'un ne le saurait pas. "Elbrus" est comme ça
Encore une petite retraite forcée. Le fait est que j'ai déjà eu affaire à des logiciels nationaux, tels que MSVS et Baguette RTOS. J'avais de l'expérience avec des composants nationaux, y compris un processeur de MCST. Par conséquent, je peux dire en toute responsabilité qu'il existe une certaine spécificité dans ce domaine et j'essaierai de ne pas l'aborder dans l'article. Quand j’en aurai vraiment envie, je mettrai le tag [TBD]. On va donc essayer de se passer de purs trolles et de gémissements banals. En fin de compte, il faut comprendre l’industrie de défense russe et les agences gouvernementales. Grand pays - petit budget.. [À déterminer].
Étape zéro - télécharger. Il est à noter que la nouvelle de la disponibilité du système d'exploitation Elbrus a provoqué une résonance, à tel point que le serveur de distribution est tombé en panne. [TBD] Merci à Yandex et à l'ingénieur qui a pensé à le déplacer là-bas. La vitesse de téléchargement est donc bonne.
La première étape -pose. Je l'ai installé sur le premier hyperviseur disponible en utilisation gratuite. J'ai alloué deux cœurs, quelques Go de RAM, 32 Mo pour la vidéo (il y aura une interface graphique, pensais-je). Le disque est comme d'habitude - 32 Go.
J'ai commencé l'installation. Je n'ai pas utilisé les instructions d'installation, je ne peux donc pas faire de commentaire à ce sujet. L'interface d'installation de TUI est extrêmement minimaliste.
Eh bien, super, on peut se passer de souris.
J'ai réussi la fenêtre suivante au deuxième essai. Pourquoi ne pas sélectionner le périphérique par défaut sr0 [TBD] lors de l'installation à partir du disque ?
Sélectionnez la source du CD-ROM et continuez.
En sélectionnant le fuseau horaire, j'ai soudainement réalisé que le système utilise le processus de démarrage init et que je travaille à partir de TTY0.
OK, alors classons « Elbrus » comme communauté
Le reste n'a presque pas d'importance : on met tout et on est d'accord. En chemin, nous découvrons que le noyau est utilisé 3.14.79-13.84. Hmm, Debian 7 avait 3.2 [à déterminer].
Ensuite, sélectionnez le partitionnement de disque par défaut et... Nous voyons un avertissement :
Hmm, d'une manière ou d'une autre, le partitionnement automatique ne fonctionnait pas bien avec un disque de 32 Go. Je n'ai pas changé le disque, j'ai terminé la quête avec un partitionnement manuel du disque dans le style « tout-en-un ». J'ai dû installer ext3, car /boot ne pouvait pas être dans ext4.
Le système est apparu sans incident.
La deuxième étape - rechercher des alternatives.
Après avoir fouillé dans le contenu du deuxième disque, j'ai réalisé qu'il s'agissait d'un référentiel avec des fichiers supplémentaires. en paquets. Et en regardant /etc/apt/sources.list, j'ai réalisé qu'il devait être monté dans /mnt/cdrom. Mais je n'ai pas trouvé /etc/os-release. Mais il existe /etc/mcst-version avec le contenu 3.0-rc36. 3.0 est probablement la version – elle semble convenir, mais rc36 ? En général, les logiciels tiers ne seront probablement pas en mesure de reconnaître cette distribution de la manière classique.
Dans la partition racine, le répertoire /mcst attire mon attention, et là, le cœur serré, je découvre /mcst/backup. Autrement dit, il existe un outil de sauvegarde, et il est intégré au système ! "Super", ai-je pensé, "Voyons comment ça marche!"
Il s'est avéré qu'il existe un script bash de 4 Ko /mcst/bin/backup qui permet la copie de fichiers. Par défaut - dans le répertoire /mcst/backup. Dans le code source, je m'attendais à voir la commande rsync, mais elle n'est pas dans la configuration par défaut. Le script copie simplement les fichiers. La commande ressemble à ceci :
cp -rpdx <file backup> <file>
Le fichier complet /mcst/bin/backup est iciJe vous préviens tout de suite que ce script seul ne suffit pas à bien comprendre. Il extrait les fonctions de /mcst/bin/source, qui ressemble à une bibliothèque de fonctions. Je ne l'ai pas inclus (44 Ko).
#!/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
Mais peut-être que je n’ai pas compris quelque chose ? Peut-être que quelqu'un pourra expliquer dans les commentaires : comment ce script garantit-il une sauvegarde des données sûre et fiable ? [à déterminer]
rsync, soit dit en passant, est inclus dans le module complémentaire. référentiels. Version 3.1.3. Je pense que l'utilisation de rsync reste une meilleure alternative à l'application /mcst/bin/backup.
Ensuite, j'ai décidé d'en mettre un nouveau Veeam Agent pour Linux. Quelqu’un demandera : « Qu’est-ce que Veeam et la substitution des importations ont à voir là-dedans ? » Oui, il n'est pas inscrit au registre, mais il est certifié par le FSTEC, ce qui signifie qu'en l'absence d'alternatives, il peut être utilisé. Passer quinze minutes sur des alternatives de
Troisième étape — installation de Veeam Agent pour Linux.
Ainsi, Veeam Agent pour Linux se compose de deux packages : le module du noyau veeamsnap (d'ailleurs,
Il y a eu un petit problème lors de l'installation du module du noyau : le paquet dkms manquant. Il s'agit d'un service qui vous permet de créer des modules du noyau à partir des sources. En règle générale, il est disponible sur toutes les distributions deb. J'ai dû le télécharger à partir d'un référentiel Deb tiers. Une chose qui m'a fait plaisir, c'est que le package ne dépend pas de l'architecture, il s'adapte donc comme un package natif. Pourquoi n’a-t-il pas été inclus dans la liste des packages disponibles, ou plutôt n’a-t-il pas été développé [à déterminer] ? On suppose peut-être que personne ne devrait créer et exécuter des modules de noyau non MCST. Il y a vraiment une différence ici - puisqu'il y a des en-têtes Linux. Autrement dit, le module, si vous le souhaitez, peut être assemblé à la main et lancé par un script au démarrage de la machine. Je pense que vous ne devriez pas vous attendre à des mises à jour fréquentes de MCST [TBD].
"OK, le module est installé - le plus difficile est passé", ai-je pensé... Le package veeam pour le référentiel deb est destiné à la plate-forme amd64, et le système d'exploitation Elbrus a une plate-forme x86_64 [à déterminer]. La différence, bien sûr, n'est que dans le nom, mais cette différence rend presque tous les packages provenant de référentiels deb tiers incompatibles avec le système d'exploitation Elbrus. Ce malentendu gênant peut être éliminé simplement : il suffit de démonter le package, de corriger les informations sur l'architecture et de le remonter. Comment faire
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Un autre problème concerne les dépendances. Les fichiers nécessaires semblent être là, mais pas les packages. L'impression était que les noms des colis différaient de leurs « analogues importés ». Peut-être que les bibliothèques sont emballées différemment. Je ne suis pas entré dans trop de détails, j'ai supprimé presque toutes les dépendances et l'installation s'est poursuivie.
Ensuite, des problèmes sont apparus avec le code de démarrage du service. Le script /lib/init/vars.sh manquait. Pour une raison quelconque, Elbrus s'en passe, nous le supprimerons donc également. Ensuite, nous avons dû remplacer la fonction de sortie de message : les fonctions log_daemon_msg et log_end_msg manquaient. Après avoir fouillé dans le fichier /lib/lsb/init-functions, j'ai trouvé la fonction log_success_msg - ce sera bon pour nous pour les expériences. À propos, dans le fichier /lib/lsb/init-functions, la ligne « # Source SuSE`s rc function » se trouve au début du fichier [TBD].
Après un traitement aussi brutal du package avec un fichier, la sauvegarde de l'intégralité de la machine sur le partage NFS a été lancée avec succès. Le montage de sauvegarde a également réussi. Donc, je pense que pour sauvegarder une machine avec le PDK Elbrus, téléchargé « comme ça » sans aucune obligation, Veeam Agent pour Linux est tout à fait adapté. Même après toutes les modifications avec un fichier .
Bien entendu, le kit de distribution Elbrus OS n'est pas formellement pris en charge, car il n'est pas inclus dans la liste des kits pris en charge. De plus, Veeam Agent pour Linux n'a pas été testé par le service QA, donc ceux-là. il n'y a aucun support (du moins au moment de la publication de l'article).
J'espère que l'article sera utile à ceux qui tentent de mettre en œuvre l'arrêté n°334 du 29.06.2017 juin XNUMX. Le mien à vous... [à déterminer].
Source: habr.com