[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Clients identiek houden



Hoi,

Op 09-01-15 om 12:25 schreef Paul van der Vlis:
> Hoi allen,
> 
> Ik beheer een aantal clients die eigenlijk identiek zijn, op een paar
> uitzonderingen na zoals de hostname. Ik heb een backup van zo'n client
> op de server.
> 
> Om een client te installeren boot ik met een live-cd, partitioneer,
> formatteer, download de data uit de backup, en installeer grub. Wellicht
> kan dit handiger, maar dit werkt.
> 
> Nu zit ik me af te vragen of zoiets ook later zou kunnen, dus om de
> machines identiek te houden. Bijvoorbeeld vanaf de server iets van:
> rsync -a --exclude=... --del /client pc01:/
> 
> Het lijkt me eigenlijk moeten kunnen, alleen komt die --exclude
> natuurlijk wel vrij precies. en zijn er wellicht nog meer punten (zoals
> de netwerk interfaces in udev, en het UUID van het filesystem moet
> identiek zijn).

Ik heb dit nu getest voor een upgrade van Debian7 naar Debian8 en het
lukt redelijk. Het syncen zelf geeft geen problemen.

Een punt is wel dat het UUID van het filesysteem en de swap correct
moeten zijn, want dat wordt via rsync niet meegekopieerd. Een
alternatief is eventueel in /etc/fstab en /boot/grub/grub.conf een
devicenaam te gebruiken in plaats van het UUID.
Het lastige van een filesysteem UUID is dat je het alleen kunt aanpassen
als dat filessysteem niet gemount is,

Verder is het me nog niet gelukt om na het sysncen het systeem netjes
uit te zetten met "poweroff" of iets dergelijks, wellicht komt dat omdat
init.d veranderd is in systemd. Op het moment wordt het systeem hard
uitgezet, niet helemaal netjes.

Wat als laatste nog een probleem is, is dat grub welliswaar vervangen is
op het filesysteem, maar niet in het MBR, daarom krijg je een Grub
rescue prompt. Als ik echter boot met een livecd dan is dit eenvoudig te
herstellen door te chrooten en een "grub-install --recheck /dev/sda1"
uit te voeren. Wellicht kan dit nog in het sync-script worden opgenomen.

Dit lijkt me ook heel geschikt om een client later te updaten, zodat de
systemen weer echt gelijk zijn.

Hieronder heb ik de scripts neergezet, er is vast het een en ander wat
nog beter kan. Kritiek en aanvullingen zijn welkom.

Groet,
Paul.

---------
#!/bin/bash
# paul@vandervlis.nl
# script om client naar de server te kopieren

# start
echo -e "\n`date +%T` Start backup"

# ask machine when not on commandline:
if test "$1" = ""; then
  read -p "Machine naam (voorbeeld: mm-n001): " machine
else
  machine=$1
fi
if test "$machine" = ""; then
  echo no machine.
  exit
fi

# Local DIR voor backup
LDIR="/backup/client8"
# Wat niet gebackupped hoeft te worden
EXCLUDE="\
--exclude=/mnt/** \
--exclude=/backup/** \
--exclude=/proc/** \
--exclude=/tmp/** \
--exclude=/lost+found \
--exclude=/sys/** \
--exclude=/var/cache/apt/archives/** \
--exclude=/home/** \
--exclude=/data/** \
"

#syncen naar remote
echo -e "\n`date +%T` Syncen naar backup-server:"
if ! test -e $LDIR; then mkdir -p $LDIR; chmod 700 $LDIR; fi
cd $LDIR
nice rsync -axzve ssh --numeric-ids --del --delete-excluded  $EXCLUDE \
   $machine:/ ./

# verwijderen udev bestanden:
rm $LDIR/etc/udev/rules.d/70-persistent-net.rules
rm $LDIR/etc/krb5.keytab

# klaar
echo -e "\n`date +%T` Backup klaar."
----------

---------
#!/bin/bash
# paul@vandervlis.nl
# script om client vanaf de server te updaten

# start
echo -e "\n`date +%T` Start sync"

# ask machine when not on commandline:
if test "$1" = ""; then
  read -p "Machine naam (voorbeeld: mm-n001): " machine
else
  machine=$1
fi
if test "$machine" = ""; then
  echo no machine.
  exit
fi

# Local DIR
LDIR="/backup/client8"

# Wat niet gebackupped hoeft te worden
EXCLUDE="\
--exclude=/mnt/** \
--exclude=/proc/** \
--exclude=/tmp/** \
--exclude=/lost+found \
--exclude=/sys/** \
--exclude=/var/cache/apt/archives/** \
--exclude=/var/log/** \
--exclude=/home/** \
--exclude=/data/** \
--exclude=/etc/hostname \
--exclude=/etc/krb5.keytab \
--exclude=/etc/udev/rules.d/** \
--exclude=/etc/ssh/ssh_host_* \
"

#syncen naar remote
echo -e "\n`date +%T` Syncen naar client:"
cd $LDIR
nice rsync -axzve ssh --numeric-ids --del $EXCLUDE \
   ./ $machine:/

# klaar
echo -e "\n`date +%T` Backup klaar."
-----------

# wijzigen UUID, zoiets:
tune2fs -U ad118d5d-456b-4fbe-b902-f8c9bd87afeb /dev/sda1
swapoff /dev/sda5
mkswap -U dfae00aa-23d7-4d56-8226-e7ebc5cf8f4a /dev/sda5


-- 
Paul van der Vlis Linux systeembeheer, Groningen
http://www.vandervlis.nl


Reply to: