GNU/Linux >> Znalost Linux >  >> Cent OS

Sjednocení vlastních skriptů v celém systému s rpm na Red Hat/CentOS

Cíl

Naším cílem je vytvářet rpm balíčky s vlastním obsahem, sjednocovat skripty na libovolném počtu systémů, včetně verzování, nasazení a zrušení nasazení.

Verze operačního systému a softwaru

  • Operační systém: Red Hat Enterprise Linux 7.5
  • Software: rpm-build 4.11.3+

Požadavky

Privilegovaný přístup k systému pro instalaci, normální přístup pro sestavení.

Obtížnost

STŘEDNÍ

Konvence

  • # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo příkaz
  • $ – dané linuxové příkazy, které mají být spouštěny jako běžný neprivilegovaný uživatel

Úvod

Jednou ze základních vlastností jakéhokoli systému Linux je, že jsou vytvořeny pro automatizaci. Pokud může být potřeba provést úlohu více než jednou – i když se některá její část při příštím spuštění změní – má správce systému k dispozici nespočet nástrojů pro její automatizaci, od jednoduchého shell skripty spouštěné ručně na vyžádání (čímž se eliminují překlepy nebo se uloží pouze některé klávesové zkratky) až po složité skriptované systémy, kde se úlohy spouštějí z cron v určený čas, vzájemná interakce, práce s výsledkem jiného skriptu, možná řízená centrálním řídicím systémem atd.

I když tato svoboda a bohatá sada nástrojů skutečně přispívá k produktivitě, má to jeden háček:jako správce systému napíšete užitečný skript v systému, který se ukáže jako užitečný v jiném, takže skript zkopírujete. Na třetím systému je skript také užitečný, ale s drobnými úpravami – možná nová funkce užitečná pouze v tomto systému, dosažitelná s novým parametrem. S ohledem na zobecnění rozšíříte skript tak, aby poskytoval novou funkci, a také dokončíte úkol, pro který byl napsán. Nyní máte dvě verze skriptu, první je na prvních dvou systémech, druhá na třetím systému.

V datovém centru běží 1024 počítačů a 256 z nich bude potřebovat některé funkce poskytované tímto skriptem. Časem budete mít 64 verzí skriptu, přičemž každá bude dělat svou práci. Při příštím nasazení systému potřebujete funkci, kterou si vybavíte kódovanou v nějaké verzi, ale kterou? A na kterých systémech jsou?

Na systémech založených na RPM, jako jsou varianty Red Hat, může sysadmin využít správce balíčků k vytvoření pořádku ve vlastním obsahu, včetně jednoduchých skriptů shellu, které nemusí poskytovat jiné než nástroje, které pro pohodlí napsal správce.

V tomto tutoriálu vytvoříme vlastní otáčky za minutu pro Red Hat Enterprise Linux 7.5 obsahující dva bash skripty, parselogs.sh a pullnews.sh poskytnout tak, aby všechny systémy měly nejnovější verzi těchto skriptů v /usr/local/sbin adresář, a tedy na cestě každého uživatele, který se přihlásí do systému.

Distribuce, hlavní a vedlejší verze

Obecně platí, že vedlejší a hlavní verze sestavovacího stroje by měly být stejné jako systémy, do kterých má být balíček nasazen, a také distribuce, aby byla zajištěna kompatibilita. Pokud existují různé verze dané distribuce nebo dokonce různé distribuce s mnoha verzemi ve vašem prostředí (och, radost!), měli byste nastavit sestavovací stroje pro každou z nich. Abychom to zkrátili, stačí nastavit sestavení prostředí pro každou distribuci a každou hlavní verzi a mít je na nejnižší vedlejší verzi existující ve vašem prostředí pro danou hlavní verzi. Nemusí to být nutně fyzické stroje a musí být spuštěny pouze v době sestavování, takže můžete používat virtuální stroje nebo kontejnery.

V tomto tutoriálu je naše práce mnohem jednodušší, nasadíme pouze dva skripty, které nemají vůbec žádné závislosti (kromě bash ), takže vytvoříme noarch balíčky, které znamenají „nezávislý na architektuře“, také nebudeme specifikovat distribuci, pro kterou je balíček vytvořen. Tímto způsobem je můžeme nainstalovat a upgradovat na jakoukoli distribuci, která používá rpm a na jakoukoli verzi – potřebujeme pouze zajistit, aby rpm-build sestavovacího stroje balíček je na nejstarší verzi v prostředí.

Nastavení prostředí budovy

Chcete-li sestavit vlastní balíčky rpm, musíme nainstalovat rpm-build balíček:

# yum install rpm-build

Od této chvíle nepoužíváme root uživatele, a to z dobrého důvodu. Sestavení balíčků nevyžaduje root privilegium a nechcete rozbít svůj stavební stroj.

Sestavení první verze balíčku

Vytvořme adresářovou strukturu potřebnou pro sestavení:

$ mkdir -p rpmbuild/SPECS

Náš balíček se nazývá admin-scripts, verze 1.0. Vytvoříme specfile který specifikuje metadata, obsah a úlohy prováděné balíkem. Toto je jednoduchý textový soubor, který můžeme vytvořit pomocí našeho oblíbeného textového editoru, jako je vi . Dříve nainstalovaný rpmbuild Pokud používáte vi, balíček vyplní váš prázdný specfile daty šablony vytvořit prázdný, ale pro tento tutoriál zvažte specifikaci níže nazvanou admin-scripts-1.0.spec :

Name:           admin-scripts
Version:        1
Release:        0
Summary:        FooBar Inc. IT dept. admin scripts
Packager:       John Doe 
Group:          Application/Other
License:        GPL
URL:            www.foobar.com/admin-scripts
Source0:        %{name}-%{version}.tar.gz
BuildArch:      noarch

%description
Package installing latest version the admin scripts used by the IT dept.

%prep
%setup -q


%build

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/sbin
cp scripts/* $RPM_BUILD_ROOT/usr/local/sbin/

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%dir /usr/local/sbin
/usr/local/sbin/parselogs.sh
/usr/local/sbin/pullnews.sh

%doc

%changelog
* Wed Aug 1 2018 John Doe 
- release 1.0 - initial release

Umístěte specfile do rpmbuild/SPEC adresář, který jsme vytvořili dříve.

Potřebujeme zdroje uvedené v specfile – v tomto případě dva skripty shellu. Pojďme vytvořit adresář pro zdroje (nazývaný jako název balíčku připojený k hlavní verzi):

$ mkdir -p rpmbuild/SOURCES/admin-scripts-1/scripts

A zkopírujte/přesuňte do něj skripty:

$ ls rpmbuild/SOURCES/admin-scripts-1/scripts/
parselogs.sh  pullnews.sh

Protože tento tutoriál není o skriptování shellu, obsah těchto skriptů je irelevantní. Vytvoříme novou verzi balíčku a pullnews.sh je skript, se kterým budeme demonstrovat, jeho zdroj v první verzi je následující:

#!/bin/bash
echo "news pulled"
exit 0

Nezapomeňte přidat příslušná práva k souborům ve zdroji – v našem případě právo provádění:

chmod +x rpmbuild/SOURCES/admin-scripts-1/scripts/*.sh


Nyní vytvoříme tar.gz archiv ze zdroje ve stejném adresáři:

cd rpmbuild/SOURCES/ && tar -czf admin-scripts-1.tar.gz admin-scripts-1

Jsme připraveni sestavit balíček:

rpmbuild --bb rpmbuild/SPECS/admin-scripts-1.0.spec

Získáme nějaký výstup o sestavení, a pokud se něco pokazí, zobrazí se chyby (například chybějící soubor nebo cesta). Pokud vše půjde dobře, náš nový balíček se objeví v adresáři RPMS generovaném ve výchozím nastavení pod rpmbuild adresář (seřazený do podadresářů podle architektury):

$ ls rpmbuild/RPMS/noarch/
admin-scripts-1-0.noarch.rpm

Vytvořili jsme jednoduchý, ale plně funkční rpm balíček. Můžeme se dotázat na všechna metadata, která jsme poskytli dříve:

$ rpm -qpi rpmbuild/RPMS/noarch/admin-scripts-1-0.noarch.rpm 
Name        : admin-scripts
Version     : 1
Release     : 0
Architecture: noarch
Install Date: (not installed)
Group       : Application/Other
Size        : 78
License     : GPL
Signature   : (none)
Source RPM  : admin-scripts-1-0.src.rpm
Build Date  : 2018. aug.  1., Wed, 13.27.34 CEST
Build Host  : build01.foobar.com
Relocations : (not relocatable)
Packager    : John Doe 
URL         : www.foobar.com/admin-scripts
Summary     : FooBar Inc. IT dept. admin scripts
Description :
Package installing latest version the admin scripts used by the IT dept.


A proto jej můžeme nainstalovat (s root privilegia):

Instalace vlastních skriptů s rpm

Jak jsme nainstalovali skripty do adresáře, který je na $PATH každého uživatele , můžete je spustit jako jakýkoli uživatel v systému z libovolného adresáře:

$ pullnews.sh 
news pulled


Balíček může být distribuován tak, jak je, a může být vložen do úložišť dostupných pro libovolný počet systémů. To je mimo rozsah tohoto tutoriálu – sestavení jiné verze balíčku však rozhodně není.

Vytvoření další verze balíčku

Náš balíček a extrémně užitečné skripty v něm se okamžitě stanou populární, protože jsou dostupné kdekoli pomocí jednoduchých yum install admin-scripts v prostředí. Brzy bude mnoho žádostí o vylepšení – v tomto příkladu mnoho hlasů pochází od spokojených uživatelů, že pullnews.sh vytisknout další řádek při provádění, tato funkce by zachránila celou společnost. Potřebujeme vytvořit další verzi balíčku, protože nechceme instalovat další skript, ale jeho novou verzi se stejným názvem a cestou, protože na ni správci systému v naší organizaci již hodně spoléhají.

Nejprve změníme zdroj pullnews.sh ve ZDROJÍCH k něčemu ještě složitějšímu:

#!/bin/bash
echo "news pulled"
echo "another line printed"
exit 0

Potřebujeme znovu vytvořit tar.gz s novým zdrojovým obsahem – můžeme použít stejný název souboru jako poprvé, protože neměníme verzi, pouze vydáváme (a tedy Source0 odkaz bude stále platný). Všimněte si, že nejprve odstraníme předchozí archiv:

cd rpmbuild/SOURCES/ && rm -f admin-scripts-1.tar.gz && tar -czf admin-scripts-1.tar.gz admin-scripts-1

Nyní vytvoříme další specfile s vyšším číslem vydání:

cp rpmbuild/SPECS/admin-scripts-1.0.spec rpmbuild/SPECS/admin-scripts-1.1.spec

Na samotném balíčku toho mnoho neměníme, takže novou verzi jednoduše spravujeme, jak je uvedeno níže:

Name:           admin-scripts
Version:        1
Release:        1
Summary:        FooBar Inc. IT dept. admin scripts
Packager:       John Doe 
Group:          Application/Other
License:        GPL
URL:            www.foobar.com/admin-scripts
Source0:        %{name}-%{version}.tar.gz
BuildArch:      noarch

%description
Package installing latest version the admin scripts used by the IT dept.

%prep
%setup -q


%build

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/sbin
cp scripts/* $RPM_BUILD_ROOT/usr/local/sbin/

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%dir /usr/local/sbin
/usr/local/sbin/parselogs.sh
/usr/local/sbin/pullnews.sh

%doc

%changelog
* Wed Aug 22 2018 John Doe 
- release 1.1 - pullnews.sh v1.1 prints another line
* Wed Aug 1 2018 John Doe 
- release 1.0 - initial release

Vše hotovo, můžeme sestavit další verzi našeho balíčku obsahující aktualizovaný skript. Všimněte si, že jako zdroj sestavení odkazujeme na specfile s vyšší verzí:

rpmbuild --bb rpmbuild/SPECS/admin-scripts-1.1.spec

Pokud je sestavení úspěšné, máme nyní v adresáři RPMS dvě verze balíčku:

ls rpmbuild/RPMS/noarch/
admin-scripts-1-0.noarch.rpm  admin-scripts-1-1.noarch.rpm

A nyní můžeme nainstalovat „pokročilý“ skript nebo upgradovat, pokud je již nainstalován.

Upgrade vlastních skriptů pomocí rpm

A naši správci systému vidí, že požadavek na funkci je vyřízen v této verzi:

rpm -q --changelog admin-scripts
* Wed aug 22 2018 John Doe 
- release 1.1 - pullnews.sh v1.1 prints another line

* Wed aug 01 2018 John Doe 
- release 1.0 - initial release

Závěr

Náš vlastní obsah jsme zabalili do verzovaných rpm balíčků. To znamená, že žádné starší verze nezůstaly rozptýlené po systémech, vše je na svém místě ve verzi, kterou jsme nainstalovali nebo na kterou jsme upgradovali. RPM umožňuje nahradit staré věci potřebné pouze v předchozích verzích, může přidávat vlastní závislosti nebo poskytovat některé nástroje či služby, na které spoléhají naše další balíčky. S úsilím můžeme zabalit téměř jakýkoli náš vlastní obsah do balíčků rpm a distribuovat jej napříč naším prostředím nejen snadno, ale také konzistentně.


Cent OS
  1. Jak monitorovat systém pomocí Sysstat na Centos

  2. Linux – Spuštění programů jako root s vlastním heslem ve Scientific Linux/red Hat/fedora/centos?

  3. Nelze rozšířit souborový systém LVM pomocí přidruženého snímku v CentOS/RHEL

  1. Zachraňte svůj systém pomocí režimu jednoho uživatele v CentOS 6 / RHEL 6

  2. Jak nastavit vlastní název rozhraní pomocí NetworkManageru v CentOS/RHEL 7

  3. Jak integrovat systém CentOS/RHEL do AD domény s LDAP/Kerberos/SSSD

  1. Jak zkontrolovat verzi Linux Red Hat (RHEL) nainstalovanou ve vašem systému

  2. Jak vypsat nainstalované balíčky na CentOS pomocí Yum nebo RPM

  3. Postgresql 9.3 na Centos 7 s vlastním PGDATA