[megoldva] Gyors (újra)telepítés sok gépre

Fórumok

Sziasztok!

Röviden:
Legyen adott sok gép, amin régi az oprendszer/szoftverek és frissíteni kell. A gépek azonos hardware-rel vannak szerelve, ezért egyet feltelepítettem, konfigoltam és utána szeretném a disk image-et lehető legegyszerűbben klónozni a többi gépre. Hogy lehet ezt a leggyorsabban megtenni pl. LAN-on keresztül?Bővebben:
1. Az 500 GB-os HDD image fájlját dd-vel leszedtem és gzip-bel összenyomtam 4.5 GB-ra: dd if=/dev/sda | gzip -v > szende.gz
2. A szende.gz fájlt elhelyeztem egy LAN hálózaton lévő gépen ssh-val elérhető helyre.
3. Odamentem az első géphez, live linux pendrive boot, home-ban (gondolom a tágas RAM miatt) van elég hely, hogy rsync-kel átmásoljam a szende.gz-t, ez a 10Mbites háló miatt kb. 7 perc.
4. sudo bash, swapoff, aztán ez a lépés kb. másfél óráig tart: gunzip -c szende.gz | dd of=/dev/sda bs=10M

Ezt elfogadhatónak tartom, és azt tervezem, hogy a 3. és 4. pontot ismétlem a többi géppel. A bökkenő az, hogy most még csak 5 gép van (5x1.5 óra...) és később több lesz. Hogyan lehetne ezt a műveltet párhuzamosíthatóvá tenni úgy, hogy ne kelljen sok live linux pendrive-ot készíteni? (Optikai drive nincs a gépekben.)

Pl. jó lenne ssh-n belépni a régi rendszereket futtató gépekre és azt használni az újratelepítéshez, de futó rendszer alól a remount,ro az összes particióra nem igazán jött össze ssh-val. Lehet egyáltalán ilyet?

Úgy emlékszem, hogy van olyan cluster rendszer (talán a rocks?), ami meg tudja csinálni, hogy ha egy gép meghibásodik a cluster-ben, akkor reboot és automatikusan újratelepíti az egész gépet. Gondolom ez is hálózaton megy valami image-ből. Talán ez még kényelmesebb lenne, de nem tudom ilyet hogy lehet csinálni...

A segítséget előre is köszönöm!

Update: Megoldva! Köszönöm mindenkinek a javaslatokat, a legtöbb nagyon hasznos. Végül most CloneZilla Live-val oldottam meg USB pendrive-ról. Lényegesen gyorsabb, mint a dd, ez is tömöríti a lemezt, de nem másolja az üres szektorokat és könnyedén sikerült elsőre összerakni úgy, hogy ssh szerverre mentse az image-et és onnan töltse vissza. A CloneZilla Live alternatív boot menüjében lehetett olyat választani, hogy RAM-ba rak mindent és akkor kihúzható a pendrive, így egyszerre több gépet is tudtam klónozni egy pendrive-val. Most az volt a cél, hogy 5 db azonos hardveres gépre ugyanaz a rendszer legyen felhúzva. A telepítés után minden gépen azonosak lettek az UUID-k, grub-bal nem volt gond, elsőre ment szépen minden, csak a /etc/hostname-et írtam át gépenként. Ha később nem teljesen azonos hardver-re is kell, akkor persze nem biztos, hogy ez a legjobb megoldás, ahogy a kommentekben is szerepel.

Hozzászólások

en biztos nem dd-znek, hanem minimum dump/restore-olnek, de persze az nem derult ki, hogy milyen os/filerendszer. A Clonezilla rengeteg formatumot ismer es lehet PXE-bol is inditani.

1. FOG project
2. Clonezilla
(3. Windows Deployment Services)

--
DO ref

Disclaimer: csal hallomásból ismerem a Debian automatikus telepítőrendszerét (van neki valami), az Ubuntuét végképp nem (nem is tudom, hogy van-e neki), a Mintét meg végképp.

A beépített telepítő tudja azt, hogy PXE-vel NFS-ről indítasz egy netboot rendszert, ami fogja a telepítő beállítófájlt (amennyire emlékszem sima text fájl) és az alapján felhúzza a rendszert. Ha beraksz egy caching proxy-t elé (vagyis az első után a csomagokat gyakorlatilag a helyi hálóról szedi) szerintem a másfél óránál gyorsabbnak kellene lennie (persze hálózattól és hardware-től is függ).

Ha mindenképp maradnál az imagelésnél, akkor tudod azt csinálni, hogy PXE-vel elindítasz pl. egy system rescue CD-t, aminek megadhatsz automatikusan elindított scriptet, abba beleteszed a lemásol-unzipel-kiír részt * és gyakorlatilag kész is vagy. Viszont arra midenképp figyelj, hogy az imageben ne maradjon gépfüggő dolog (hosts fájl, hostname stb.), gyakorlatilag "kézzel" el kell játszanod a sysprep-et [RedHat-nál pl. van az .unconfigured (azt hiszem, a gyökérbe beteszel egy ilyen fájlt, akkor a következő indításkor újra inicializálja a gépfüggő beállításokat), Debian/Ubuntu/Mint-et passzolom]

*: ha még ezt azzal is megfejeled, hogy utána kiütöd az adott géphez tartozó pxelinux conf fájlt, hogy legközelebb ne hálózatról induljon és bekapcsolod a WoL-t, akkor kész van a gombnyomásra távolról telepítéses rendszered is :) Ezt pl. az openSUSE-os telepítő beépítve tudja.

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Tudtommal valamennyi debian alapú rendszerrel működik az automatizált telepítő, csak a konfigurálás tér el...
Legalábbis debian és ubuntu közt kb. annyi az eltérés, hogy a válaszfájl tartalma picit más.

A kérdezőnek: én klónozás helyett inkább automated vagy unattended linuxmint install kifejezésre keresnék.
A klónozás csak egyforma hardverrel működik, az automatizált telepítővel megoldható, hogy kissé eltérő hardvereken is normálisan működő rendszert kapj.

Hagy (pl. rosszul emlékeztem és a network config fájlokat pont kézzel kérik törölni :) ), de példának tökéletes, hogy igenis lehetnek a sima klónozásból gondok és egy-egy vendor még gondol is erre és próbálja menteni a menthetőt.

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Tudom, még mindig jobb mint sok más, de önmagában messze nem elég.

(a network fileokat, az udev persistent bejegyzéseit is kézzel kell. Az alapbeállító csomagokat külön fel kell tenni, különben nem indulnak el, de nincsnenek függőségben (asszem). A network konfigurálható izé használhatatlan, ha nincs egyetlen ifcfg- file sem, meg ilyen apróságok)

Szeva,

Én Acronis párti vagyok.
Ha csak a nyers rendszer (beleértve a felhasználói programokat), akkor talán kissebbre is összenyomja és hálózatos restore-t is tud, ha jól emlékszem.
Hálózatos restore
Ezzel egyszerre tudsz többet is készíteni a 10Mbites hálóval is.
Egy próbát megér :)

Üdv.:
Menya

Parted Magic-al/Clonezillá-val TFPT-ről boot-olva nyolc gép kb. 2 óra alatt megvan 100-as hálón, SaMBa-share-ből.. Elindítok vagy húszat-harmincat és reggelig lefut, én ezt tudnám ajánlani..

God bless you, Captain Hindsight..

Nekem eszembe nem jutna dd -zni, mert az udev -el lesz egy csomó szopásod. Inkább ezt tenném:

1. A leginkább nélkülözhető gépet újra húznám
2. Miután az OS fenn van, tennék fel dhcp servert, meg tftp servert
3. Csinálnék preseed confot, autóinstallhoz. Csinálja meg a partícionálást, lője be az lvm -et, tegye fel az alap csomagokat (mc, vim, openssh-server, etc)
4. Fordított fontossági sorrendben újra indítgatnám a gépeket, biosban beállítanám a netbootot aztán had szaladjanak (had menjen az autóinstaller).
5. eközben az első gépen puppet -et vagy cfengine -t építenék és ezzel konfolnám be a gépeket a feladatkörüknek megfelelően.

Mindezt leegyszerűsítheted úgy is, hogy nem netboot -os rendszert építesz, csak egy szál autóinstalleres telepítő médiát csinálsz amit csak el kell indítani aztán csinál mindent, de ha megvan az autóinstalleres média akkor nem nagy meló a többi.

----
올드보이
http://molnaristvan.eu/

Milyen probléma van az udev-vel? A legutóbb is dd-vel másoltam az összes gépre és semmi probléma nem volt. Egyedül a /etc/hostname-et kellett írtam a gépeken, aztán reboot és remekül mentek mostanáig. Most is csak azért nyúlok hozzá, mert frissítést igényelnek.

(Az egyetlen problémám az, hogy lassú a dd és nem párhuzamosítható könnyen, ha több a gépem, mint a bootolható pendrive-om. Most úgy látom, hogy a clonezilla mindkét problémát meg tudja oldani, de csak pénteken tudom majd kipróbálni. Addig még persze tök jó, hogy jönnek új ötletek. :) Amúgy a gépek rendelkezésre állása jelenleg a frissítési időszakban nem fontos. A klónozási sebesség azért érdekes, hogy a munkaidőmmel spóroljak...)

Ha systemd-t használsz akkor kevesebb :) Lenart többek közt a persistent-network rules fájlra (ami ha nem törölted azt jelenti, hogy az összes gépeden van egy udev szabály, ami a referencia gép MAC címére hivatkozik) hivatkozva rakta bele az új interfész elnevezési rendszert.

Hasonlóan, vannak szabályok, amik új szabályokat hoznak létre, ha reboot-ok közt fix eszköznevek kellenek, de a persistent-network a leggyakoribb.

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Réges régen (1998-1999) ezt úgy csináltuk, hogy:

Az alap rendszer akkor 2x2GB-os partíción volt (Linux és Windows – most is kb. akkorát készítenék, ami kényelmesen elég, de nem fölöslegesen nagy), ezt tömörítetlenül másoltuk a szerverre. A tömörítetlenség egyik előnye, hogy loop mount-olható, szoftverek frissíthetők ott.

Kézzel-lábbal összetákoltunk c-bash egyvelegben olyat, ami 4kB-onként md5-öt számol és azt binárisan (16 byte-on) tárolja el, összefűzve mindet. Ez az image fájl méretének 256-od része.

A kliensek dhcp, nfsroot stb. segítségével tudtak bebootolni az újratelepítéshez. NFS-en látták az image fájlt és az md5 fájt is. Az md5-öt olvasták, összevetették a diszk tartalmával, és csak ahol eltérés volt ott töltötték le az image megfelelő részét.

További optimalizálást csináltunk a csupa 0 blokkok táján. Egyrészt a referencia image-en a nem használt blokkokat mindig kinulláztuk (pl. szoftverfrissítés után cat /dev/zero > file; [no space left on device]; rm file), másrészt a kliens felismerte a csupa 0 blokk md5-jét és kinullázta a blokkot, anélkül hogy letöltött volna 4kB-nyi nullát a szerverről.

Az első telepítés (particionálás, stb.) eléggé kézzel ment és lassú is volt, de utána az újratelepítés már nagyon gyors: kb. 5 perc alatt végzett akkor is ha a közel 50 kliens mind párhuzamosan csinálta (a helyi diszk tekerése volt a szűk keresztmetszet, nem igazán a 10Mbites háló). Persze journaling kikapcs, noatime, esetleg readonly mountolás is jót tesznek.

A gépek BIOS-át kézzel beállítottuk, hogy hajnalban percenként felébredjenek, a LILO valami timeout-tal Linuxot bootolt, ami a boot során ha épp hajnal volt, akkor átkonfigta a LILO-t hogy az újratelepítő kernelt (dhcp, nfsroot) töltse be és megküldte reboot-ra a rendszert. A telepítő a diszk image-ek ily módon letöltése után még átírt egy-két fájlt ami esetleg gépenként különböző volt (pl. X konfig), beállította a pontos időt, és újratelepítette a LILO-t. Ily módon minden nap friss Linux és Windows telepítés volt a klienseken, de szükség esetén nap közben is villámgyorsan lehetett javítani, ha megsérült valami.

Sajnos nem hinném hogy megvan még valahol ez a szoftver :(, de remélem sikerült ötletet adnom, ha van kedved egy kis hackeléshez!

Ha hiszed ha nem, nekem a mai napig meg van ez a szoftver. Konkrétan az amit te irtál, és a mai napig ezzel installozom a gépeket mindhárom teremben. Igaz, azóta gigabites háló került alá, meg jócskán nagyobb partíciók, de a program ugyanaz...

Pont ezen a nyáron kell kicsit rendbetegyük a dolgokat, úgyhogy még át is kell nyálaznom majd pontosan hogyan működik.

Kicsi a világ...

clonezilla, lemented vele a gepet, majd visszatudod tolteni oket tobb gepre egyszerre, az adatokat multicasttal is tudja lekuldeni

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

PXE boot + udp multicast

Amit nem lehet megirni assemblyben, azt nem lehet megirni.

chef/puppet/ansible/salt kozpontilag? image masolgatas helyett, ami mar 5 eve is ciki volt...

Bar szebben is le lehetett volna irni, de neki van igaza.
Az adott rendszer unattended install megoldasa (ez Red Hat vonalon a kickstart, Mint vonalon meg fogalmam sincs :) ) + configuracios manager (en puppet parti vagyok (azt ismerem legjobban) de mostanaban egyre tobben hasznalnak chef-et is).
Bar lehet, hogy az elejen tobb ido lesz osszerakni, de ezzel kapod a legflexibilisebb megoldast, amit a jovoben is tudsz majd hasznalni (ertsd HW cserenel). Emellett enterprise kornyezetben szinte mindenhol ezt hasznaljak -> a tudas, amit igy szerzel kesobb jol mutat az oneletrajzban.

Mindkét megoldásnak meg van a maga helye, ráadásul az imagelős sem zárja ki a konfigurációmenedzsment használatát.

pl.: Imagelés (linkelném a vonatkozó RHEV guide-ot a hogyan készítsünk sablon image-t, miket kell kiszedegetni az image-ből és hogy használjuk az /.unconfigured fájlt, de lusta vagyok) jól jön, ha nagyon gyorsan kell egyforma gépeket felhúzni (pl. új web kiszolgálók a hirtelen megugró látogatottság miatt), az unattended install meg akkor jobb, ha "ráérősen" kell sok gépet felhúzni, amiket utána használni is fognak, különböző célokra (így akár az unattended akár a konfig menedzsment rendszerből a különböző igényekhez lehet igazítani).

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Valojaban, az altalad emlitett RHEV guide arrol szol, hogy hogyan kell template-et csinalni RHEL-bol virtualizalt kornyezethez. Nem pedig arrol, hogy mit kell a RHEL-el csinalni mielott ddclonizillawhatever toollal atmasolod az egyik fizikai gepet a masikra. Termeszetesen megcsinalhato fizikai gepekkel is (mint sokminden mas linux-al ;) ) csak nem flexibilis, nem elegans megoldas.

Az unattended (kickstart) install fizikai gepek eseten nem feltetlenul tart sokkal tovabb, mint az itt emlitett clone-ozos megoldasok (BTW, mi inkabb azt preferaljuk Virtualizalt kornyezetben is a template-ek helyett), de legalabb hosszutavon jobban fog mukodni.

Tehat az en velemenyem meg mindig (ne is probalj meggyozni ;)): minimal unattended install (ami beregeli a gepet a config managerbe) + config manager

Nem akarlak meggyőzni, csak annyit akartam írni, hogy nem feltétlenül kell az image-lést lenézni, vannak use case-k, ahol működik [és a topicban párszor én is inkább az unattended install-t javasoltam, csak az extremitásokat, az azonnal elutasító gondolkodást nem szeretem :) ].

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Pár évvel ezelőtt én egy telepítő livecd-t készítettem ami annyit tudott, hogy a gépet a cd-ről indítva beavatkozás nélkül a gépre telepítette a cd-n becsomagolt rendszert, majd a telepítés végeztével leállt.

Ha van kedved saját megoldást készíteni:
(a telepítő szkript)


#!/bin/bash

### BEGIN INIT INFO
# Provides:          sys
# Required-Start:    $local_fs $all killprocs
# Required-Stop:
# Default-Start:     1
# Default-Stop:
# Short-Description: make system
### END INIT INFO


DEV="sda"

UUID_CRYPT="7220b682-a56d-4890-8b74-66055467c354"
UUID_BOOT="56c3b601-4320-4b75-8c22-0fdb86eedaf3"
UUID_ROOT="7ee74b1b-3ba1-43f0-bfce-d8e036777b23"

# elozo particiok torlese a merevlemezrol
dd if=/dev/zero of="/dev/${DEV}" bs=1M count=10 2>/dev/null || exit 1

# particiok letrehozasa
echo -e "n\np\n1\n\n+200M\nn\np\n2\n\n\nw\n" | fdisk -cu "/dev/${DEV}" || exit 1

# /boot fajlrendszer letrehozas
mkfs.ext4 -U ${UUID_BOOT} "/dev/${DEV}1" || exit 1

# particio titkositas
modprobe sha256_generic || exit 1
modprobe aes_i586 || exit 1
modprobe aes_generic || exit 1
cryptsetup -q luksFormat --uuid ${UUID_CRYPT} "/dev/${DEV}2" /opt/key || exit 1
cryptsetup --key-file /opt/key luksOpen "/dev/${DEV}2" "${DEV}2_crypt" || exit 1

# root fajlrendszer letrehozasa
mkfs.ext4 -U ${UUID_ROOT} "/dev/mapper/${DEV}2_crypt" || exit 1

# root fajlrendszer felcsatolasa
mkdir -p /DES || exit 1
mount "/dev/mapper/${DEV}2_crypt" /DES || exit 1

# boot fajlrendszer felcsatolasa
mkdir -p /DES/boot || exit 1
mount "/dev/${DEV}1" /DES/boot || exit 1

# rendszer masolas
tar -xzvC /DES/ -f /opt/sys.tar.gz || exit 1

# grub telepitese
grub-install --root-directory=/DES "/dev/${DEV}" || exit 1

# fajlrendszer lecsatolasa
umount /DES/boot || exit 1
umount /DES || exit 1

# titkositott eszkoz elengedese
cryptsetup luksClose "/dev/mapper/${DEV}2_crypt" || exit 1

# leallitas
init 0

Ezt is nézd meg esetleg:

http://www.ultimatedeployment.org/

What is the Ultimate Deployment Appliance?
Unattended OS installations (Windows, Linux, ESX, Solaris) over the network set-up in minutes!
Publish your favorite recovery/system maintenance tools over the network!
PXE Booting, Remote Installation Services, Kickstart, Jumpstart, Autoyast in a box!

OS Support

Operating Systems

The Ultimate Deployment Appliance supports automated deployment of the following operating systems:
VMWare ESX 2.5.x and 3.0.x 4, 4.1
VMWare ESX 3i (manual install), 4i (manual install), 4.1i, 5i
Windows 2000, XP and 2003
Windows 7, 8, 2008, 2012
Xen Server 5.5 and 6.0
Ubuntu 7.04 and up
RedHat 4, 5, 6
Centos 4, 5, 6
Fedora 9, 10, 11, 12, 13, 14, 15, 16
Suse 10.0, 10.1 and 10.2
Solaris 10 x86
Solaris 10 sparc (experimental)

OPSI (www.opsi.org)
Gyárilag windowsokat tud telepíteni, de valószínűleg linux telepítése is összehozható (hivatalosan "Linux planned".)
Win-re van egy agent-je, amivel alkalmazásokat tud telepíteni.
Tud még hardver- és szoftverleltárt, pénzért licenckezelést.

Üdv!

Jó lenne tudni hogy mik a végcélok, sokat számít a megoldás kiválasztásában.

pl.
Előkészületek - image preparation.

Ha már linux Mint, akkor annak van úgynevezett OEM telepítője.
(Igaz néha kiveszik, elfelejtik, külön telepítőkészletben adják.)

De érdemes megnézni. gy.k. hasonló megoldásra lehet használni akár windows esetén a sysprep -et. ('Visszazárás' után gy.k. a gépre vonatkozó dolgokat - pl felhasználó, IP, stbstb megkéredzi az első indulásnál.)
Kis utánajárással ez a rész automatizálható. (preseed lesz a megfelelő kulcsszó.)

A másik hasonló megoldás a remastersys valamelyik alternatvája lehet:
http://alternativeto.net/software/remastersys/

Klónozás:

Hálózaton keresztül érdemes megnézni a drbl -t. Sokszor a live lemezt használtam sima clonezilla -hoz is. A grafikus felület miatt.
Ez a multicast miatt. (yt -on érdemes megnézni, pár éve volt fent egy elég impresszív video...)

Ha visszatérünk az eredeti címhez, az újratelepítéshez, akkor clonezilla -val lehet kvázi pár kattintásos rendszer-visszaállítást csinálni. Ha van elég hely a lemezen rá, akkor egy külön partícióval és a clonezilla -val megoldható egy DIY system restore.

Konfig mngment, kickstat , autoyast stb és társai:

Ha a konfig adott és fontos hogy újrahúzás után up-to-date legyen a rendszer akkor ezek jöhetnek szóba. (A többiek már beidéztek egy csomó lehetőséget.)

A fenti mellé érdemes gondolkodni egy helyi repo v. apt-proxy v. hasonló megoldás beállításán hogy ne mindegyik gép a netről legyen telepítve.

memo:
Ha egy munkahelyre kell a megoldás és fontos a frissesség is akkor a központi telepítő rendszereket nézném meg.

Ha elég ha egy alap van ami használható akkor klónozás.

Illetve,ha sok nagyjából azonos gép kell akkor érdemes megnézni a puppy linux -ot mint alternatívát. Pl általános iskolai terem kialakítására.
A magyar oldalon van pár direkte oktatásra - érettségire szabott változat. Illetve érdemes megnézni Csipesz mester kreálmányait jó kis bloated tényleg all-in-one rendszerek.

Szóval legalább annyi támpont hogy egy munkhely vagy egy iskolai gépterem kialakítása lesz-e a végcél.

--
RudyD

Köszönöm mindenkinek a segítséget! A megoldásomat és a tapasztalataimat beleszerkesztettem az indító post-ba.

clonezillanak van server oldali cucca: tudja pxerol bootoltatni a gepeket (pl command linebol megadhato hogy X es Y mac cimu gep clonezillat bootoljaon, mindenki mas localbootra menjen), tudja fogadni/kuldeni a menteseket, es ha jol emlexem meg a post scripteket is be lehet allitani (hostnev).

Ha jol ossze van rakva a cucc, akkor eleg csak megmondani melyik gepet akarod ujrahuzni, es mindent megcsinal magatol.

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!