Do-it-te Bare-Metal Provisiones, seu Praeparatio Automatic ministrantium a VULNUS

Salve, ego sum Dionysius et unus ex meis locis activitatis est progressus solutionum infrastructurarum ad X5. Hodie vobiscum communicare vellem quomodo ratio praeparationis latae servientis explicari potest in promptu instrumentorum publice fundatorum. Opinor, haec est interesting, simplex et flexibilis solutio.

Do-it-te Bare-Metal Provisiones, seu Praeparatio Automatic ministrantium a VULNUS

Praeparationem significamus: novum ministratorem ex archa convertam in servitorem plene figuratum cum OS. Linux vel hypervisor cum ESXi (instructio servorum Fenestra hoc articulo non tractatur).

verbis:

  • servers - servers qui necessitate configurari.
  • servo institutionis principalis ministrator est qui totum processum praeparationis super retiacula praebet.

Cur automation opus est?

Negotium esse dicamus: massive praeparare servitores de scabere, ad apicem – 30 per diem. Servientes diversorum fabricantium et exemplorum, diversae systemata operativae in eis institui possunt, et hypervisorem habere vel non possunt.

Quae operationes in processu setup procedunt (sine automatione);

  • claviaturas, murem, monitor servo;
  • configurare BIOS, RAID, IPMI;
  • firmware elementum update;
  • imagini systematis fasciculi explicandam (vel hypervisorem instituendum et machinis virtualis effingo);

Nota. Vel, OS instruere potest per institutionem cum tabella auto-responsabili. Sed hoc in articulo non dicetur. Quamvis infra videbis hanc functionem addere non difficile est.

  • OS parametri configurare (hostname, IP, etc.).

Cum hoc accessu, iidem ordines successiue in singulis ministris peraguntur. Talis operis efficacia est valde inferior.

Ratio automationis est abolere participationem humanam a processu praeparationis ministri. Quantum potest.

Automatio temporis inter operationes minuit et efficit ut pluribus simul ministrantibus provideatur. Multum etiam imminuitur errorum verisimilitudo ob factores hominum.

Do-it-te Bare-Metal Provisiones, seu Praeparatio Automatic ministrantium a VULNUS

Quomodo servientes automatice configurantur?

Omnes gradus singillatim excutiamus.

Linux servo tuo uteris ut servo institutionis PXE uteris. Officia in ea installantur et configurantur: DHCP, TFTP.

Ita nos servo tabernus (quod configurari debet) per PXE. Meminerimus quomodo agit;

  • Network tabernus quod in calculonis servi electus est.
  • Servus onerat PXE-ROM card retis ac contactus institutionem servo per DHCP ut obtineat retis inscriptio.
  • In servo institutionis DHCP inscriptio exit, necnon instructiones ad ulteriores per PXE deprimendas.
  • Servus retis velum oneratus ab institutione servo per PXE onerat, porro oneratio fit secundum PXE configurationis fasciculum.
  • Tabernus occurs in parametris acceptis (nuclei, initramfs, puncta montis, imaginis squashfs, etc.).

Nota. Articulus tabernus per PXE per BIOS modum describit. In statu, artifices UEFI bootmode strenue exsequentes. Pro PXE, differentia erit in schemate DHCP servientis et praesentiae adiectis praedones.

Intueamur exemplum figurae PXE servientis (pxelinux menu).

Tabella pxelinux.cfg/default:

default menu.c32
prompt 0
timeout 100
menu title X5 PXE Boot Menu
LABEL InstallServer Menu
	MENU LABEL InstallServer
	KERNEL menu.c32
	APPEND pxelinux.cfg/installserver
LABEL VMware Menu
	MENU LABEL VMware ESXi Install
	KERNEL menu.c32
	APPEND pxelinux.cfg/vmware
LABEL toolkit // мСню ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
	MENU LABEL Linux Scripting Toolkits
	MENU default
	KERNEL menu.c32
	APPEND pxelinux.cfg/toolkit // ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ мСню

Fasciculus pxelinux.cfg/toolkit:

prompt 0
timeout 100
menu title X5 PXE Boot Menu
label mainmenu
    menu label ^Return to Main Menu
    kernel menu.c32
    append pxelinux.cfg/default
label x5toolkit-auto // ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” автоматичСский Ρ€Π΅ΠΆΠΈΠΌ
        menu label x5 toolkit autoinstall
        menu default
        kernel toolkit/tkcustom-kernel
        append initrd=toolkit/tk-initramfs.gz quiet net.ifnames=0 biosdevname=0 nfs_toolkit_ip=192.168.200.1 nfs_toolkit_path=tftpboot/toolkit nfs_toolkit_script=scripts/mount.sh script_cmd=master-install.sh CMDIS2=”…”
label x5toolkit-shell // для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ - консоль
        menu label x5 toolkit shell
        kernel toolkit/tkcustom-kernel
        append initrd=toolkit/tkcustom-initramfs.gz quiet net.ifnames=0 biosdevname=0 nfs_toolkit_ip=192.168.200.1 nfs_toolkit_path=tftpboot/toolkit nfs_toolkit_script=scripts/mount.sh script_cmd=/bin/bash CMDIS2=”…”

Praecipua ac initramfs in hoc statu sunt media Linux imago, cuius ope principalis praeparatio et conformatio servi fient.

Ut videre potes, bootloader multos parametros ad nucleum transit. Horum aliquot parametri ab ipso nucleo utuntur. Alicuius autem possumus uti ad propositum nostrum. Hoc postea dicetur, nunc autem modo meminisse potes omnes parametri praetermissos in media Linux imaginis via /proc/cmdline praesto erunt.

Unde mihi eos, nucleos et initramfs?
Fundamento, aliquam distributionem Linux eligere potes. Quod attendimus ad eligendum;

  • imago violenta universalis esse debet (availability of drivers, facultas additional utilitates instituendi);
  • Maxime, mos initramfs necesse est.

Quomodo hoc factum est in solutione nostra pro X5? CentOS 7 in basium electum est, sequentem technam experiamur: praeparet structuram futurae imaginis, eam in archivum fac et initramfs crea, in quibus intus nostrum tabularium tabularium erit. Cum onerant imaginem, tabularium in tmpfs partitione creatum dilatetur. Hoc modo dabimus minimam, plenam tamen vivam imaginem linux flexis cum omnibus necessariis utilitatibus, duobus tantum fasciculis constans: vmkernel et initramfs.

#создаСм Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ: 

mkdir -p /tftpboot/toolkit/CustomTK/rootfs /tftpboot/toolkit/CustomTK/initramfs/bin

#ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ структуру:

yum groups -y install "Minimal Install" --installroot=/tftpboot/toolkit/CustomTK/rootfs/
yum -y install nfs-utils mariadb ntpdate mtools syslinux mdadm tbb libgomp efibootmgr dosfstools net-tools pciutils openssl make ipmitool OpenIPMI-modalias rng-tools --installroot=/tftpboot/toolkit/CustomTK/rootfs/
yum -y remove biosdevname --installroot=/tftpboot/toolkit/CustomTK/rootfs/

# ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ initramfs:

wget https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-x86_64 -O /tftpboot/toolkit/CustomTK/initramfs/bin/busybox
chmod a+x /tftpboot/toolkit/CustomTK/initramfs/bin/busybox
cp /tftpboot/toolkit/CustomTK/rootfs/boot/vmlinuz-3.10.0-957.el7.x86_64 /tftpboot/toolkit/tkcustom-kernel

# создаСм /tftpboot/toolkit/CustomTK/initramfs/init (Π½ΠΈΠΆΠ΅ содСрТаниС скрипта):

#!/bin/busybox sh
/bin/busybox --install /bin
mkdir -p /dev /proc /sys /var/run /newroot
mount -t proc proc /proc
mount -o mode=0755 -t devtmpfs devtmpfs /dev
mkdir -p /dev/pts /dev/shm /dev/mapper /dev/vc
mount -t devpts -o gid=5,mode=620 devpts /dev/pts
mount -t sysfs sysfs /sys
mount -t tmpfs -o size=4000m tmpfs /newroot
echo -n "Extracting rootfs... "
xz -d -c -f rootfs.tar.xz | tar -x -f - -C /newroot
echo "done"
mkdir -p /newroot/dev /newroot/proc /newroot/sys
mount --move /sys  /newroot/sys
mount --move /proc /newroot/proc
mount --move /dev  /newroot/dev
exec switch_root /newroot /sbin/init

# ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ rootfs ΠΈ initramfs:

cd /tftpboot/toolkit/CustomTK/rootfs
tar cJf /tftpboot/toolkit/CustomTK/initramfs/rootfs.tar.xz --exclude ./proc --exclude ./sys --exclude ./dev .
cd /tftpboot/toolkit/CustomTK/initramfs
find . -print0 | cpio --null -ov --format=newc | gzip -9 > /tftpboot/toolkit/tkcustom-initramfs-new.gz

Ita diximus nucleos et initramfs quibus onerari debet. Quam ob rem, in hac scaena, imaginis linux mediae per PXE onerato, consolatorium OS accipiemus.

Magna, sed nunc necesse est potestatem nostram transferre ad "automationem".

Fieri potest ut hoc.

Demus imaginem oneratam imaginis transferendi potestatem in scripturam montis.
Includamus scriptum in autorun. Ad hoc opus initramfs mitigare necesse est;

  • unpack initramfs (si optione supra initramfs utimur, hoc non requiritur)
  • includunt codicem in startup qui parametris per /proc/cmdlineum transivit et in ulteriorem potestatem transferet, resolvere erit;
  • stipant initramfs.

Nota. In casu instrumenti X5, oneratisque imperium ad scriptum transfertur /opt/x5/toolkit/bin/hook.sh с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ override.conf Π² getty tty1 (ExecStart=…)

Est igitur imago onerata, in qua incipit scriptionis mons autoruni. Deinceps scriptura scriptor parametri latas (script_cmd=) in executione analyscat et necessarias programmata script.

titulus toolkit-Car
nucleus...
append... nfs_toolkit_script=script/mount.sh script_cmd=master-install.sh

titulus toolkit-testa
nucleus...
append... nfs_toolkit_script=script/mount.sh script_cmd=/bin/bash

Do-it-te Bare-Metal Provisiones, seu Praeparatio Automatic ministrantium a VULNUS

Hic a sinistris est menu PXE, in dextra figura translationis est.

Figuratum habemus translationem imperii. Secundum PXE electionem tabulae, vel scriptionem auto- configurationis vel consolatorium debugging educitur.

In casu schematismi, directoria necessaria sunt ex servo institutionis, quae continent:

  • scripta;
  • BIOS/UEFI templates pro variis servientibus servavit;
  • firmware;
  • utilitatis cultor;
  • acta

Deinceps scripturae scriptionis insanicae traditionis imperium ad dominum install.sh scripturam e directorio scripti transfert.

Scriptum arboris (ordine quo inducuntur) simile quiddam spectat;

  • dominus-install
  • sharefunctions (participatur munera)
  • info (notitia output)
  • exempla (profecta institutionem parametri secundum exemplar servo)
  • prepare_utils (necessariae utilitatis institutionem)
  • fwupdate (firmware update)
  • diag (ementa diagnostica)
  • biosconf (BIOS/UEFI occasus)
  • clockfix (occasum tempus in motherboard)
  • srmconf (remota configuratione interface interface)
  • raidconf (configurans logicae voluminibus)

unum:

  • preinstall (transferre imperium ad OS vel hypervisor installer, ut ESXi)
  • merged-install (initium statim vestimenta imaginis)

Nunc scimus;

  • quomodo a servo per PXE;
  • quam ad tuam scriptionem transferre potestatem.


Perge. Sequuntur quaestiones pertinet:

  • Quomodo cognoscere paramus servo?
  • Quae utilitas et quomodo servo configuratur?
  • Quam impetro occasus pro certo servo?

Quomodo cognoscere paramus servo?

Simplex suus - DMI;

dmidecode –s system-product-name
dmidecode –s system-manufacturer
dmidecode –s system-serial-number

Omne quod opus est hic est: venditor, exemplar, numerus vide. Si non certus es hanc informationem omnibus servientibus adesse, eas per eorum MAC inscriptionem cognoscere potes. Vel utroque modo simul, si diversae sunt venditores venditorum et in aliquibus exemplaribus, nulla prorsus notitia est de numero serial.

Fundatur in indicio recepto, folders retiarii a servo institutionis conscenduntur et omnia necessaria onerantur (utilitas, firmware, etc.).

Quae utilitas et quomodo servo configuratur?

Utilitates Linux aliqua pariatur. Omnes utilitates in websites mercatorum officialium praesto sunt.

Do-it-te Bare-Metal Provisiones, seu Praeparatio Automatic ministrantium a VULNUS

Firmware ego omnia clara esse arbitror. Solent venire in forma files exsecutabile packaged. Exsecubilis fasciculus processus update firmware moderatur et reditus nuntiat codicem.

BIOS et IPMI plerumque per exempla figurantur. Si opus est, exemplum editum iri ante demptionem.

INCURSUS utilitas a nonnullis venditoribus configurari etiam potest usu exemplaris. Si hoc non fit, configurationem scribendam habebis.

Ratio instaurationis incursio saepissime est:

  • Configuratione hodiernam petimus.
  • Si iam sunt indumenta logicalia, eas delemus.
  • Intueamur quidnam sint orbes physici et quot sint.
  • Novam logicam ordinatam crea. Processum interrumpimus in casu erroris.

Quam impetro occasus pro certo servo?

Ponamus quod unctiones omnium ministrantium in servo institutionis reponendae erunt. In hoc casu, ut ad nostram quaestionem respondeamus, primum statuendum est quomodo ordines ad institutionem ministri transferendi sint.

In primis, per files textis licebit. (In posterum, fasciculo textu uti velis ut methodo fallamentorum ad occasus transferendi.)

Potes "partire" textum fasciculi in servo institutionis. Et montem eius adde script.

Lineae, exempli gratia, hoc vide:

<vide numerum> <hostname> <subnet>

Hae lineae ad fasciculum a fabro ex machina operis transferentur. Tum, cum servo constituens, parametri pro servo certo e tabella legentur.

Sed, in longum tempus, melius est uti database ut occasus, civitates et tigna officinarum servientium condant.

Scilicet, sola database non satis est, et clientem partem creare debes cuius ope ad database loca transferentur. Difficilius est hoc instrumentum ad textum limam comparatum, re vera omnia non tam difficilia quam ut videtur. Valde possibile est clientis versionem minimam scribere, quae simpliciter notitias ad te datorum transferet. Et in posterum poterit emendare clientem programmatis in libero modo (renuntiationes, pittacia imprimendi, notificationes mittens, etc. quae in mentem venit).

Petitionem specificam datorum et numerum serialem denotantes, necessarios parametri recipiemus pro servo figurantes.

Plus, non necesse est nos cum cincinnis accedere ad accessum simultaneum, sicut in fasciculo textu.

Scribere configurationem stipes database omnibus gradibus et processus institutionem moderari per eventus ac vexilla praeparationis gradus.

Nunc scimus quomodo;

  • tabernus servo per PXE;
  • imperium ad nostram scriptionem transferre;
  • cognoscere cultorem qui suo numero serial praeparari debet;
  • configurare servo opportunis utilitatibus utens;
  • transfer occasus ad institutionem servo datorum utens parte clientis.

Invenimus quomodo:

  • server installed occasus necessarios e datorum accipit;
  • omnis progressus praeparationis memoratur in datorum (tignis, eventis, scaenicis vexillis).

Quid de generibus software vos install? Quomodo hypervisorem inaugurare, VM effingere et omnia configurare?

In explicandis fasciculi systematis imagine (linux) ferramentis, omnia plane simplicia sunt;

  • Postquam omnia membra servuli constituunt, imaginem explicamus.
  • Install vermis bootloader.
  • Nos omnia quae opus sunt ingerimus et configuramus.

Quomodo imperium ad OS installarium transferendum (ESXi utens exemplo).

  • Instruimus translationem imperii a scripto nostro ad instrumentum hypervisorem utendo tabella responsionis latae sententiae (intrimentum);
  • Hodiernae partitiones in disco delemus.
  • Partem creare cum magnitudine 500MB.
  • Notamus eam quasi bootable.
  • Forma ad FAT32.
  • Exemplar institutionis ESXi ad radicem imagini adsignamus.
  • Inaugurari syslinux.
  • Effingo syslinux.cfg ad /syslinux/

default esxi
prompt 1
timeout 50
label esxi
kernel mboot.c32
append -c boot.cfg

  • Exemplar mboot.c32 ad /syslinux.
  • Boot.cfg debet habere kernelopt=ks=ftp:// /ks_esxi.cfg
  • Servo reboot sumus.

Post reboots servo, installator ESXi ex servo ferreus coegi extrahet. Omnes fasciculi necessarii installarii in memoriam onerabuntur et tunc institutionem ESXi incipiet, secundum praefinitum documentum auto-responsum.

Hic sunt paucae lineae ex tabella autoresponsa ks_esxi.cfg:

%firstboot --interpreter=busybox
…
# ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ сСрийный Π½ΠΎΠΌΠ΅Ρ€

SYSSN=$(esxcli hardware platform get | grep Serial | awk -F " " '{print $3}')

# ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ IP

IPADDRT=$(esxcli network ip interface ipv4 get | grep vmk0 | awk -F " " '{print $2}')
LAST_OCTET=$(echo $IPADDRT | awk -F'.' '{print $4}')

# ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ NFS инсталл-сСрвСра

esxcli storage nfs add -H is -s /srv/nfs_share -v nfsshare1

# ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ настройки ssh, для использования ssh-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

mv /etc/ssh /etc/ssh.tmp
cp -R /vmfs/volumes/nfsshare1/ssh /etc/
chmod go-r /etc/ssh/ssh_host_rsa_key

# ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ ovftool, для развСртывания Π’Πœ сСйчас, плюс Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ пригодится ΠΏΠΎΠ·ΠΆΠ΅

cp -R /vmfs/volumes/nfsshare1/ovftool /vmfs/volumes/datastore1/

# Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π΅ΠΌ Π’Πœ

/vmfs/volumes/datastore1/ovftool/tools/ovftool --acceptAllEulas --noSSLVerify --datastore=datastore1 --name=VM1 /vmfs/volumes/nfsshare1/VM_T/VM1.ova vi://root:[email protected]
/vmfs/volumes/datastore1/ovftool/tools/ovftool --acceptAllEulas --noSSLVerify --datastore=datastore1 --name=VM2 /vmfs/volumes/nfsshare1/VM_T/VM2.ova vi://root:[email protected]

# ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ строку с настройками нашСго сСрвСра

ssh root@is "mysql -h'192.168.0.1' -D'servers' -u'user' -p'secretpassword' -e "SELECT ... WHERE servers.serial='$SYSSN'"" | grep -v ^$ | sed 's/NULL//g' > /tmp/servers
...
# Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ скрипт настройки сСти

echo '#!/bin/sh' > /vmfs/volumes/datastore1/netconf.sh
echo "esxcli network ip interface ipv4 set -i=vmk0 -t=static --ipv4=$IPADDR --netmask=$S_SUB || exit 1" >> /vmfs/volumes/datastore1/netconf.sh
echo "esxcli network ip route ipv4 add -g=$S_GW -n=default || exit 1" >> /vmfs/volumes/datastore1/netconf.sh
chmod a+x /vmfs/volumes/datastore1/netconf.sh

# Π·Π°Π΄Π°Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ guestinfo.esxihost.id, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π² Π½Π΅ΠΌ сСрийный Π½ΠΎΠΌΠ΅Ρ€

echo "guestinfo.esxihost.id = "$SYSSN"" >> /vmfs/volumes/datastore1/VM1/VM1.vmx
echo "guestinfo.esxihost.id = "$SYSSN"" >> /vmfs/volumes/datastore1/VM2/VM2.vmx
...
# обновляСм ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Π±Π°Π·Π΅

SYSNAME=$(esxcli hardware platform get | grep Product | sed 's/Product Name://' | sed 's/^ *//')
UUID=$(vim-cmd hostsvc/hostsummary | grep uuid | sed 's/ //g;s/,$//' | sed 's/^uuid="//;s/"$//')
ssh root@is "mysql -D'servers' -u'user' -p'secretpassword' -e "UPDATE servers ... SET ... WHERE servers.serial='$SYSSN'""
ssh root@is "mysql -D'servers' -u'user' -p'secretpassword' -e "INSERT INTO events ...""

# Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ настройки SSH

rm -rf /etc/ssh
mv /etc/ssh.tmp /etc/ssh

# настраиваСм ΡΠ΅Ρ‚ΡŒ ΠΈ пСрСзагруТаСмся

esxcli system hostname set --fqdn=esx-${G_NICK}.x5.ru
/vmfs/volumes/datastore1/netconf.sh
reboot

Hac scaena, hypervisor inauguratus et configuratus est, et machinae virtuales exscriptae sunt.

Quomodo nunc virtualis machinis configurare?

Paulum circumscripsimus: inter institutionem modulum guestinfo.esxihost.id = "$SYSSN" in tabella VM1.vmx posuimus et in ea numerum serialem ministrantis corporis indicavimus.

Nunc, inceptis, machina virtualis (cum involucro vinware inaugurato) hunc modulum accedere potest:

ESXI_SN=$(vmtoolsd --cmd "info-get guestinfo.esxihost.id")

Hoc est, VM se cognoscere poterit (novit numerum serialem exercitus corporis), rogationem datorum datorum institutionem et parametri recipiendi qui configurari necesse est. Haec omnia compilata sunt in scriptionem, quae automatice deducenda est quando incipit Hospes vin (sed semel: RunOnce).

Nunc scimus quomodo;

  • tabernus servo per PXE;
  • imperium ad nostram scriptionem transferre;
  • cognoscere cultorem qui suo numero serial praeparari debet;
  • configurare servo opportunis utilitatibus utens;
  • transfer occasus ad institutionem servo datorum utens in parte clientis;
  • varias programmatum configurare, inter quas explicandis hypervisoris Esxi et machinis virtualibus conformantibus (omnium automatice).

Invenimus quomodo:

  • server installed occasus necessarios e datorum accipit;
  • omnis progressus praeparationis memoratur in datorum (tignis, eventis, scaenicis vexillis).


Bottom linea:

Singularitatem credo huius solutionis in eius flexibilitate, simplicitate, capacitatibus et versatilitate positam esse arbitror.

Quaeso scribe in commentaria quid sentias.

Source: www.habr.com